【问题标题】:unable to read data form sharedpreference variable无法从共享首选项变量中读取数据
【发布时间】:2017-07-13 21:56:03
【问题描述】:

共享首选项的创建方式如下:

edt = sp.edit();
edt.putString("token_value", pojo.getKey());
edt.commit();

我想在另一个类中使用这个值:

String key = sp.getString("token_value", "");

此时我收到如下错误:

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference

请给我您宝贵的建议,并提前感谢...

【问题讨论】:

  • 请提供整个方法
  • 您好先生,这是完整的方法 public static String PREF_NAME = "Login";公共静态 int PRIVATE_MODE=0; SharedPreferences sp; SharedPreferences.Editor 编辑; sp=getSharedPreferences(PREF_NAME,PRIVATE_MODE); edt=sp.edit(); edt.putString("token_value",pojo.getKey());
  • 此代码不足以理解具体问题,请提供详细代码。
  • 您是否在同一个线程中放置和访问了首选项?如果您在不同的过程中放置​​和访问首选项,您可能会遇到问题..
  • 更多细节可以在这里找到stackoverflow.com/a/4695567/3796784

标签: android sharedpreferences


【解决方案1】:

SharedPreferences 变量 sp 已声明但未初始化。将此添加到您的代码中:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(YourActivity.this);
String key = sp.getString("token_value","");

【讨论】:

    【解决方案2】:

    将变量保存在SharedPreferences

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = preferences.edit();
    // make sure pojo.getKey() return value not null prefer make check here 
    //if(pojo.getKey() != null)
    editor.putString("token_value",pojo.getKey());
    editor.apply();
    

    检索任何你想要的地方

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    String name = preferences.getString("token_value", "");
    

    用你的字符串做你想做的事

    【讨论】:

    • 对不起,我得到了同样的错误,先生,像这样----------- 原因:java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String android.content.Context.getPackageName()' 在空对象引用上
    • 在哪里调用 getString 方法、活动、片段、适配器
    • 这个问题意味着你传递了错误的上下文,所以用 Activity.this 或正确的上下文替换它
    • 请检查这个先生 public class ConfigTask extends AsyncTask { ConfigCallback callback;私人字符串 emailId;上下文骗局; SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(con);字符串名称 = sp.getString("token_value", ""); public ConfigTask(ConfigCallback callback, String emailId) { Log.d("++++++++++++++","+++++++++++"+ sp.getString(" token_value","")); this.callback = 回调; this.emailId = emailId; }
    【解决方案3】:

    您收到此错误是因为您在获取值时传递了 null。改成

    String key = sp.getString("token_value", null);
    

    这样,你就会得到价值。

    【讨论】:

    • 获取"" 完全没问题。如果变量在SharedPreferences 上不存在,这是他将获得的默认字符串(空)。不为空。
    【解决方案4】:

    在检索首选项之前,您是否初始化了 sp 对象?

    SharedPreferences sp = yourActivity.getPreferences(Context.MODE_PRIVATE);
    String key = sp.getString("token_value", "");
    

    异常清楚地表明您的 sp 变量是一个空引用,并且没有指向任何对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多