обновлять общие предпочтения внутри класса автоматически - PullRequest
0 голосов
/ 23 января 2020

У меня есть отдельный класс "FirebaseUserProfile", который добавляет и обновляет информацию о пользователе как в приложении, так и в базе данных Firebase. До сих пор я использовал sharedpreferences в MainActivity. java, но теперь я хочу переместить это в FirebaseUserProfileClass, чтобы я мог легко обновлять информацию о пользователях в приложении.

Ниже вы видите мой код в классе как я хочу это сделать Сначала метод сохранения общих настроек:

 public void saveDataForPreferences(Context context, String hasUserAlreadySeenTheIntroMessage, String key){
    SharedPreferences sharedPreferences = context.getSharedPreferences(hasUserAlreadySeenTheIntroMessage, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, hasUserAlreadySeenTheIntroMessage);
    editor.apply();
}

А затем мой метод, который добавляет «желаемую» информацию в этот метод выше:

public void addPersonalInfoToDB(final Context howToDoThis){ // is this correct?

    Query secretNotesQuery = FirebaseDatabase.getInstance().getReference().child("AdditionalUserInfo");
    secretNotesQuery.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            //final DatabaseReference current_notes_db = FirebaseDatabase.getInstance().getReference().child("AdditionalUserInfo").push();
            final DatabaseReference current_notes_db = FirebaseDatabase.getInstance().getReference().child("yo").push();
            Map extraUserInfo = new HashMap();
            extraUserInfo.put("sex", sex);
            extraUserInfo.put("user-age", age);
            extraUserInfo.put("user-weight", weight);
            extraUserInfo.put("intro-message-seen", introMessageSeen);
            extraUserInfo.put("user_id", getUid());

            saveDataForPreferences(howToDoThis, introMessageSeen,"2");


            current_notes_db.setValue(extraUserInfo);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

}

и внутри моей «ProfileCompletionActivity»:

the_firebase_profile_class.addPersonalInfoToDB(); // What i can i put inside this parameter?

Я получаю сообщение об ошибке:

method addPersonalInfoToDB in class FirebaseUserProfile cannot be applied to given types;

required: Context

found: no arguments

Может ли кто-нибудь помочь мне с этим? спасибо.

РЕДАКТИРОВАТЬ: Также метод, где я могу прочитать общие настройки:

    public int readSharedPreference(Context context,String lol ,String key){
    SharedPreferences sharedPreferences = context.getSharedPreferences(lol, Context.MODE_PRIVATE);
    return temp = sharedPreferences.getInt(key,DEFAULT);
}

Ответы [ 2 ]

0 голосов
/ 23 января 2020

просто поставить Activityname.this в параметре функции. В вашем случае замените эту строку

the_firebase_profile_class.addPersonalInfoToDB();

на эту строку

the_firebase_profile_class.addPersonalInfoToDB(ProfileCompletionActivity.this);
0 голосов
/ 23 января 2020

A Context для большинства практических целей является экземпляром Activity или Application, поэтому одним из способов является передача ссылки на ваш вызов Activity в качестве параметра функции addPersonalInfoToDB.

Также, когда вы вызываете context.getSharedPreferences(hasUserAlreadySeenTheIntroMessage, Context.MODE_PRIVATE), обязательно передайте постоянное значение первому аргументу, который является идентификатором файла настроек. Вам нужно передать постоянное значение, представьте имя, например "storage", чтобы вы всегда сохраняли и извлекали из одного и того же файла, например: context.getSharedPreferences("storage", Context.MODE_PRIVATE)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...