Android 在Recyclerview适配器中获取共享首选项字符串值
我想从共享首选项中获取字符串值,并在Recylerview适配器中显示它。任何帮助都将不胜感激Android 在Recyclerview适配器中获取共享首选项字符串值,android,android-recyclerview,sharedpreferences,Android,Android Recyclerview,Sharedpreferences,我想从共享首选项中获取字符串值,并在Recylerview适配器中显示它。任何帮助都将不胜感激 这是我的密码 public class MyViewHolder extends RecyclerView.ViewHolder { // private SharedPreferences prefs; 公共语境 public ABCAdapter(List<ChatHistory>MessagesList,Context context) { this.Messa
这是我的密码
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", "");
}
}
公共ABCAdapter(ListMessagesList,上下文){
this.MessageList=MessagesList;
context=this.context;
}
公共MyViewHolder(视图){
超级(视图);
//SharedReferences pref=PreferenceManager.GetDefaultSharedReferences(上下文);
//字符串profile\u name=pref.getString(“profile\u name”,null);
prefs=context.getSharedReferences(Constants.MY\u prefs\u NAME,MODE\u PRIVATE);
String ipAdrs=prefs.getString(“profile_name”,”);
}
}
配置文件\u名称已存储在共享首选项中
这里我得到了这个错误
尝试调用虚拟方法'android.content.SharedReferences android.content.Context.getSharedReferences(java.lang.String,int)'在null上
您应该将SharedReferences对象传递给适配器构造函数并从中读取数据您应该将SharedReferences对象传递给适配器构造函数并从中读取数据此处:
public ABCAdapter(List<ChatHistory>MessagesList,Context context) {
this.MessageList = MessagesList;
context=this.context;
}
公共ABCAdapter(ListMessagesList,上下文){
this.MessageList=MessagesList;
context=this.context;
}
应该是:
public ABCAdapter(List<ChatHistory>MessagesList,Context context) {
this.MessageList = MessagesList;
this.context=context; //this refers to class variable
}
公共ABCAdapter(ListMessagesList,上下文){
this.MessageList=MessagesList;
this.context=context;//这是类变量
}
确保在创建适配器时传递活动上下文。此处:
public ABCAdapter(List<ChatHistory>MessagesList,Context context) {
this.MessageList = MessagesList;
context=this.context;
}
公共ABCAdapter(ListMessagesList,上下文){
this.MessageList=MessagesList;
context=this.context;
}
应该是:
public ABCAdapter(List<ChatHistory>MessagesList,Context context) {
this.MessageList = MessagesList;
this.context=context; //this refers to class variable
}
公共ABCAdapter(ListMessagesList,上下文){
this.MessageList=MessagesList;
this.context=context;//这是类变量
}
确保在创建适配器时传递活动上下文。更简单(更好)的方法是
itemView.getContext().getSharedPreferences(Constants.MY_PREFS_NAME, MODE_PRIVATE);
String ipAdrs=prefs.getString("profile_name", "");
同时将上下文
传递给视图持有者
也是一种非常糟糕的做法。您可以随时从任何视图
获取上下文
,这是一种更简单(更好)的方法
itemView.getContext().getSharedPreferences(Constants.MY_PREFS_NAME, MODE_PRIVATE);
String ipAdrs=prefs.getString("profile_name", "");
同时将
上下文
传递给视图持有者
也是一种非常糟糕的做法。您可以随时从任何视图中获取上下文
上下文
在此处为空。您如何调用ABCAdapter?的可能重复。您需要在此处传递活动上下文上下文为空。您如何调用ABCAdapter?的可能重复。您需要传递activity context否如果您传递的是上下文,则应在activity中创建SharedReferences并传递SharedReferencesinstance@PooryaTaghizade当他可以获取所需字符串并直接传递它时,为什么要传递SharedReferences?@MONK因为他需要获取每个viewholder基本项属性的数据。iguess@PooryaTaghizade他总是得到相同的字符串prefs.getString(“profile_name”,”)代码>否如果要传递上下文,则应在“活动”中创建SharedReferences并传递SharedReferencesinstance@PooryaTaghizade当他可以获取所需字符串并直接传递它时,为什么要传递SharedReferences?@MONK因为他需要获取每个viewholder基本项属性的数据。iguess@PooryaTaghizade他总是得到最好的结果相同的字符串prefs.getString(“profile_name”,”)代码>