我想从共享的偏好中获取字符串值,并在recylerview适配器中显示。任何帮助将不胜感激
这是我的代码
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
在这里:
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
}
确保在创建适配器时通过活动上下文。
更容易(更好的方法(是
itemView.getContext().getSharedPreferences(Constants.MY_PREFS_NAME, MODE_PRIVATE);
String ipAdrs=prefs.getString("profile_name", "");
也将Context
传递给ViewHolder
这是一个非常糟糕的做法。您可以在任何View
Context
您应该将共享preferences对象传递给适配器构造函数,并从中读取数据