【问题标题】:giving NullPointerException when I getting data using sharedpreference [duplicate]当我使用 sharedpreference 获取数据时给出 NullPointerException [重复]
【发布时间】:2017-07-08 01:19:33
【问题描述】:

在片段类中编写的SharedPreferences代码。这是我的代码

SharedPreferences preferences = getActivity().getPreferences(Context.MODE_PRIVATE);

public void saveData(String name){
    Log.e("saved",name);
    editor = preferences.edit();
    editor.putString("Text",name);
    editor.commit();
}
public String getData(){
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
    String text = preferences.getString("Text", null);
    Log.e("save",text);
    return text;
}

这就是我从其他活动中调用 getData() 方法的方式

Stt stt = new Stt();
String name = stt.getData();

我不明白这个问题。为什么我在调用 getData() 方法时收到 nullpointerexception。我认为我的数据已成功存储。当我使用 Log 检查时,我在 saveData() 中得到了正确的字符串。

这是我的日志

FATAL EXCEPTION: main`java.lang.RuntimeException: Unable to start activity `ComponentInfo{com.example.kartikeya_pc.sample/com.example.kartikeya_pc.sample.NaturalLanguage}: java.lang.NullPointerException
                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2114)
                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2139)
                                                                               at android.app.ActivityThread.access$700(ActivityThread.java:143)
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                               at android.os.Looper.loop(Looper.java:137)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:4960)
                                                                               at java.lang.reflect.Method.invokeNative(Native Method)
                                                                               at java.lang.reflect.Method.invoke(Method.java:511)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
                                                                               at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
                                                                               at dalvik.system.NativeStart.main(Native Method)
                                                                            Caused by: java.lang.NullPointerException
                                                                               at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:371)
                                                                               at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:366)
                                                                               at com.example.kartikeya_pc.sample.Stt.getData(Stt.java:404)
                                                                               at com.example.kartikeya_pc.sample.NaturalLanguage.onCreate(NaturalLanguage.java:28)
                                                                               at android.app.Activity.performCreate(Activity.java:5203)
                                                                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2078)
                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2139) 
                                                                               at android.app.ActivityThread.access$700(ActivityThread.java:143) 
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:99) 
                                                                               at android.os.Looper.loop(Looper.java:137) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:4960) 
                                                                               at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                               at java.lang.reflect.Method.invoke(Method.java:511) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
                                                                               at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
                                                                               at dalvik.system.NativeStart.main(Native Method) `
                                                                           `

【问题讨论】:

标签: java android sqlite nullpointerexception sharedpreferences


【解决方案1】:

在您的getData 方法中,为什么不使用:

 SharedPreferences preferences = getActivity().getPreferences(Context.MODE_PRIVATE);

【讨论】:

    【解决方案2】:

    问题是您正在写入不同的文件并从不同的文件中读取数据

    从文档中:如果您使用 getActivity().getPreferences(Context.MODE_PRIVATE),您将获得一个带有引用活动名称的 sharedpref 文件。

    SharedPreferences getPreferences(整数模式)

    检索一个 SharedPreferences 对象以访问首选项 此活动专用。这只是简单地调用底层 通过传入此活动的 getSharedPreferences(String, int) 方法 类名作为首选项名称。

    使用 PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()) 您将获得完全不同的由框架管理的 sharedpref 文件。

    SharedPreferences getDefaultSharedPreferences(上下文上下文)

    获取一个 SharedPreferences 实例,该实例指向给定上下文中首选项框架使用的默认文件。

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2015-07-16
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多