获取RecyClerview适配器中的共享首选项字符串值



我想从共享的偏好中获取字符串值,并在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对象传递给适配器构造函数,并从中读取数据

最新更新