0

我正在尝试在我的 android 应用程序中保存一些首选项。但是当我试图获得一个共享偏好时,我得到了一个空指针异常。这是错误:

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;
}
}

这是我的活动中我试图从我的偏好中检索值的地方:

try{

        SharedPreferences sp = new SharedPreferences();
        licentie = sp.getData("LicenseKey", "Error loading license");
    } catch (Exception e){
        e.printStackTrace();
        licentie = "";
    }
4

3 回答 3

0

你还没有调用公共布尔值

setData(String setPreference, String setValue)

这就是为什么在任何地方licentie = sp.getData("LicenseKey", "Error loading license");

它正在给予nullpointerexception

首先设置“LicenseKey”尝试检索它。

注意——你根据我使用的那种实现是不正确的。

于 2013-04-25T12:11:30.310 回答
0
android.content.SharedPreferences.Editor editor = sharedPrefs.edit();

在这一行中 sharedPrefs 未初始化。更好地在 onCreate 中初始化您的 sharedPref,如下所示。

sharedPrefs = getSharedPreferences(name);
于 2013-04-25T12:14:07.087 回答
0

在写入数据之前,您尚未初始化 sharedPrefs 对象

sharedPrefs  = _activity.getSharedPreferences(SPName, android.content.Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();

现在设置您的数据,然后提交为

editor.putString(key, value);
editor.commit();
于 2013-04-25T12:14:22.103 回答