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

时间:2019-05-13 10:54:12

标签: android android-recyclerview sharedpreferences

我想从共享的首选项中获取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

3 个答案:

答案 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
}

确保在创建适配器时传递活动上下文。