Java 自动更新类内的SharedReferences
我有一个单独的“FirebaseUserProfile”类,用于添加和更新应用程序和firebase数据库中的用户信息。到目前为止,我一直在MainActivity.java上使用SharedReferences,但现在我想将其移到FirebaseUserProfileClass中,以便在整个应用程序中轻松更新用户信息 下面你可以看到我的代码在课堂上我想怎么做。首先,保存SharedReference的方法: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
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
并检查返回值。