Android 在Recyclerview适配器中获取共享首选项字符串值

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

我想从共享首选项中获取字符串值,并在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", "");
 }
}
公共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”,”)