使用sharedpreference获取数据时给出NullPointerException

时间:2017-02-18 14:06:32

标签: java android sqlite nullpointerexception sharedpreferences

用片段类编写的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) `
                                                                           `

2 个答案:

答案 0 :(得分:0)

@IBAction func buttonpress(_ sender: UIButton) { Alamofire.request("https://securelogin.pu.ac.in/cgi-bin/login?cmd=logout").responseString { response in debugPrint(response) print(response.request) print(response.response) print(response.data) print(response.result) if let JSON = response.result.value { print("JSON \(JSON)") } } } 方法中,为什么不使用:

getData

答案 1 :(得分:0)

问题是您正在写入其他文件并从其他文件中读取数据

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

  

SharedPreferences getPreferences(int mode)

     

检索SharedPreferences对象以访问其中的首选项   私人参加此活动。这只是调用底层证券   通过传入此活动的getSharedPreferences(String,int)方法   类名作为首选项名称。

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

  

SharedPreferences getDefaultSharedPreferences(Context context)

     

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