【问题标题】:Fetching Shared Preferences String Value in Recyclerview Adapter在 Recyclerview 适配器中获取共享首选项字符串值
【发布时间】:2019-09-30 07:52:52
【问题描述】:

我想从共享首选项中获取字符串值并将其显示在 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

【问题讨论】:

标签: android android-recyclerview sharedpreferences


【解决方案1】:

一个更容易(更好的方法)是

itemView.getContext().getSharedPreferences(Constants.MY_PREFS_NAME, MODE_PRIVATE);
        String ipAdrs=prefs.getString("profile_name", "");

同时将Context 传递给ViewHolder 这是一个非常糟糕的做法。您可以随时从任何View 获取Context

【讨论】:

    【解决方案2】:

    这里:

    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
    }
    

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

    【讨论】:

      【解决方案3】:

      您应该将 SharedPreferences 对象传递给适配器构造函数并从中读取数据

      【讨论】:

      • 不,您正在传递上下文,您应该在活动中创建 SharedPreferences 并传递 SharedPreferences 实例
      • @PooryaTaghizade 既然能拿到自己需要的String,直接传过来,为什么还要传SharedPreferences?
      • @MONK 因为他需要为每个查看器基本项目属性获取数据。我猜
      • @PooryaTaghizade 他总是得到相同的字符串prefs.getString("profile_name", "");
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 2018-02-06
      • 2011-11-25
      相关资源
      最近更新 更多