我想在我的Android应用中保存一些偏好设置。但是当我试图获得共享偏好时,我得到了一个nullpointerexception。这是错误:
04-25 13:58:44.814: W/System.err(22795): java.lang.NullPointerException
04-25 13:58:44.824: W/System.err(22795): at com.koeriers.standaard.SharedPreferences.setData(SharedPreferences.java:27)
04-25 13:58:44.829: W/System.err(22795): at com.koeriers.standaard.actLogin.onCreate(actLogin.java:79)
04-25 13:58:44.834: W/System.err(22795): at android.app.Activity.performCreate(Activity.java:5206)
04-25 13:58:44.839: W/System.err(22795): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
04-25 13:58:44.844: W/System.err(22795): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
04-25 13:58:44.849: W/System.err(22795): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
04-25 13:58:44.854: W/System.err(22795): at android.app.ActivityThread.access$700(ActivityThread.java:140)
04-25 13:58:44.859: W/System.err(22795): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
04-25 13:58:44.864: W/System.err(22795): at android.os.Handler.dispatchMessage(Handler.java:99)
04-25 13:58:44.869: W/System.err(22795): at android.os.Looper.loop(Looper.java:137)
04-25 13:58:44.874: W/System.err(22795): at android.app.ActivityThread.main(ActivityThread.java:4921)
04-25 13:58:44.874: W/System.err(22795): at java.lang.reflect.Method.invokeNative(Native Method)
04-25 13:58:44.879: W/System.err(22795): at java.lang.reflect.Method.invoke(Method.java:511)
04-25 13:58:44.884: W/System.err(22795): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
04-25 13:58:44.889: W/System.err(22795): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
04-25 13:58:44.894: W/System.err(22795): at dalvik.system.NativeStart.main(Native Method)
这是我的SharedPreferences类:
package com.myapp.standaard;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.widget.EditText;
public class SharedPreferences extends PreferenceActivity {
public static String GUID = "8BB4894B-92F7-45AF-9A40-B99D7A06A506";
public static String LicenseKey = "letmein";
EditText etLicense;
android.content.SharedPreferences sharedPrefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
addPreferencesFromResource(R.xml.preferences);
etLicense = (EditText) findViewById(R.id.etLicense);
} catch (Exception e) {
e.printStackTrace();
}
}
public Boolean setData(String setPreference, String setValue) {
android.content.SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putString(setPreference, setValue);
editor.commit();
return true;
}
public String getData(String getPreference, String errorMessage) {
sharedPrefs = getSharedPreferences(getPreference, MODE_PRIVATE);
String returnData = sharedPrefs.getString(getPreference, errorMessage);
return returnData;
}
}
这是我的Activity中的位置,我试图从我的偏好中检索值:
try{
SharedPreferences sp = new SharedPreferences();
licentie = sp.getData("LicenseKey", "Error loading license");
} catch (Exception e){
e.printStackTrace();
licentie = "";
}
答案 0 :(得分:0)
你没有调用公共布尔
setData(String setPreference, String setValue)
licentie = sp.getData("LicenseKey", "Error loading license");
它正在提供nullpointerexception
。
首先设置“LicenseKey”尝试检索它。
注意 - 您根据我使用的实施方式不正确。
答案 1 :(得分:0)
android.content.SharedPreferences.Editor editor = sharedPrefs.edit();
在此行中,sharedPrefs未初始化。最好在onCreate中初始化你的sharedPref,如下所示。
sharedPrefs = getSharedPreferences(name);
答案 2 :(得分:0)
在编写数据之前,您尚未初始化sharedPrefs对象
sharedPrefs = _activity.getSharedPreferences(SPName, android.content.Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
现在设置您的数据,然后提交为
editor.putString(key, value);
editor.commit();