Android:共享首选项中的例外情况

时间:2014-04-24 10:17:16

标签: android sharedpreferences

我在共享偏好中遇到以下异常: -

    04-24 15:33:27.030: E/AndroidRuntime(23540): FATAL EXCEPTION: main
04-24 15:33:27.030: E/AndroidRuntime(23540): java.lang.NullPointerException
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:384)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:379)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at com.ht.webpageloadingapplication.ListViewSettingsActivity.loadCheckBoxSavedPreferences(ListViewSettingsActivity.java:89)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at com.ht.webpageloadingapplication.CustomAdapterSettings.getView(CustomAdapterSettings.java:185)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.AbsListView.obtainView(AbsListView.java:1469)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.ListView.makeAndAddView(ListView.java:1789)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.ListView.fillDown(ListView.java:708)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.ListView.fillFromTop(ListView.java:765)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.ListView.layoutChildren(ListView.java:1642)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.AbsListView.onLayout(AbsListView.java:1299)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.view.View.layout(View.java:7225)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:943)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.view.View.layout(View.java:7225)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.FrameLayout.onLayout(FrameLayout.java:369)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.view.View.layout(View.java:7225)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1290)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1166)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1083)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.view.View.layout(View.java:7225)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.widget.FrameLayout.onLayout(FrameLayout.java:369)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.view.View.layout(View.java:7225)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.view.ViewRoot.performTraversals(ViewRoot.java:1181)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1901)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.os.Handler.dispatchMessage(Handler.java:130)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.os.Looper.loop(SourceFile:351)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at android.app.ActivityThread.main(ActivityThread.java:3820)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at java.lang.reflect.Method.invokeNative(Native Method)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at java.lang.reflect.Method.invoke(Method.java:538)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:659)
04-24 15:33:27.030: E/AndroidRuntime(23540):    at dalvik.system.NativeStart.main(Native Method)

这是我在获取共享偏好数据的活动中的功能: -

public boolean loadCheckBoxSavedPreferences(String key, int position) {

        SharedPreferences sharedPrefCheckBox = PreferenceManager
                .getDefaultSharedPreferences(this);
        if(position == 4 || position == 5 || position == 6 || position == 11 || position == 13 || position == 15 || position == 18 || position == 20)
        return sharedPrefCheckBox.getBoolean(key, true);
        else
            return sharedPrefCheckBox.getBoolean(key, false);
    }

//It shows error on very first line of shared preferece function. This is the line causing exception:-
SharedPreferences sharedPrefCheckBox = PreferenceManager
                    .getDefaultSharedPreferences(this);

我从适配器类调用此函数。我调试了我的代码,一切看起来都很好。

2 个答案:

答案 0 :(得分:1)

如果您使用此代码:

SharedPreferences sharedPrefCheckBox = PreferenceManager
                .getDefaultSharedPreferences(this);

在适配器类中,this表示适配器类实例,而不是继承自Context的类。

您需要更改它以使用您的活动,例如通过将对活动的引用传递给适配器类(通常在适配器构造函数中传递上下文)。然后,您可以在类的上下文中创建变量。在构造函数中,将作为参数传递的上下文设置为此变量。获取共享首选项时使用此变量。

注意:某些适配器类具有可以使用的getContext()方法。

答案 1 :(得分:0)

不要使用getBaseContext

使用yourAcivity.this


试试这个:

SharedPreferences settings  = getSharedPreferences("config", 0);
Boolean yourvariable        = settings.getBoolean(key, false);