Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动更新类内的SharedReferences_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 自动更新类内的SharedReferences

Java 自动更新类内的SharedReferences,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有一个单独的“FirebaseUserProfile”类,用于添加和更新应用程序和firebase数据库中的用户信息。到目前为止,我一直在MainActivity.java上使用SharedReferences,但现在我想将其移到FirebaseUserProfileClass中,以便在整个应用程序中轻松更新用户信息 下面你可以看到我的代码在课堂上我想怎么做。首先,保存SharedReference的方法: public void saveDataForPreferences(Context

我有一个单独的“FirebaseUserProfile”类,用于添加和更新应用程序和firebase数据库中的用户信息。到目前为止,我一直在MainActivity.java上使用SharedReferences,但现在我想将其移到FirebaseUserProfileClass中,以便在整个应用程序中轻松更新用户信息

下面你可以看到我的代码在课堂上我想怎么做。首先,保存SharedReference的方法:

 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”中:

我得到一个错误:

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

required: Context

found: no arguments
有人能帮我吗?多谢各位

编辑:也是一种可以阅读SharedReferences的方法:

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

上下文
实际上是
活动
应用程序
的实例,因此一种方法是将对调用的
活动
的引用作为参数传递给
addPersonalInfoToDB
函数

另外,当调用
context.getSharedReferences(hasUseralReadySentheIntromeMessage,context.MODE\u PRIVATE)
时,请确保将常量值传递给第一个参数,该参数是首选项文件的标识符。您必须传递一个常量值,想象一个名称,如
“storage”
,因此您总是从同一个文件中保存和检索,如:
context.getSharedReferences(“存储”,context.MODE\u PRIVATE)

simple putActivityname。这是函数的参数。在你的情况下,更换这一行

the_firebase_profile_class.addPersonalInfoToDB();
the_firebase_profile_class.addPersonalInfoToDB(ProfileCompletionActivity.this);
这条线

the_firebase_profile_class.addPersonalInfoToDB();
the_firebase_profile_class.addPersonalInfoToDB(ProfileCompletionActivity.this);

ProfileCompletionActivity
参考,例如
firebase\u profile\u class.addPersonalInfoToDB(此)额外问题:我现在添加了一个读取共享引用的方法:public int readSharedPreference(上下文上下文,字符串lol,字符串键){sharedpreferences sharedpreferences=Context.getSharedPreferences(lol,Context.MODE_PRIVATE);return temp=sharedpreferences.getInt(key,DEFAULT);}如何在活动上测试此方法,以检查是否实际保存了任何数据,并在示例中显示此方法。Toast消息?如果要检查在首选项中存储数据的结果,请使用
commit
方法而不是
apply
并检查返回值。