我想从共享的首选项中获取String值,并将其显示在Recylerview Adapter中。任何帮助将不胜感激
这是我的代码
public class MyViewHolder extends RecyclerView.ViewHolder {
// private SharedPreferences prefs;
公共上下文上下文;
public ABCAdapter(List<ChatHistory>MessagesList,Context context) {
this.MessageList = MessagesList;
context=this.context;
}
public MyViewHolder(View view) {
super(view);
// SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
//String profile_name = pref.getString("profile_name", null);
prefs = context.getSharedPreferences(Constants.MY_PREFS_NAME, MODE_PRIVATE);
String ipAdrs=prefs.getString("profile_name", "");
}
}
profile_name已存储在共享首选项中。
在这里我得到这个错误。
Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null
答案 0 :(得分:1)
更容易(更好的方法)
itemView.getContext().getSharedPreferences(Constants.MY_PREFS_NAME, MODE_PRIVATE);
String ipAdrs=prefs.getString("profile_name", "");
将Context
传递给ViewHolder
也是很不好的做法。您可以随时根据需要从任何Context
View
答案 1 :(得分:0)
您应该将SharedPreferences对象传递给适配器Constructor并从中读取数据
答案 2 :(得分:0)
这里:
public ABCAdapter(List<ChatHistory>MessagesList,Context context) {
this.MessageList = MessagesList;
context=this.context;
}
应为:
public ABCAdapter(List<ChatHistory>MessagesList,Context context) {
this.MessageList = MessagesList;
this.context=context; //this refers to class variable
}
确保在创建适配器时传递活动上下文。