Android:共享首选项中的例外
在我的共享偏好中,我遇到以下例外情况:-Android:共享首选项中的例外,android,sharedpreferences,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.PreferenceMa
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);
我从适配器类调用这个函数。我已经调试了我的代码,看起来一切正常。不要使用
getBaseContext
使用yourAcivity。此
试试这个:
SharedPreferences settings = getSharedPreferences("config", 0);
Boolean yourvariable = settings.getBoolean(key, false);
如果使用此代码:
SharedPreferences sharedPrefCheckBox = PreferenceManager
.getDefaultSharedPreferences(this);
在适配器类中,此
表示适配器类实例,而不是从上下文继承的类
要使用活动,您需要更改它,例如,通过将对活动的引用传递给适配器类(上下文通常在适配器构造函数中传递)。然后可以在类上为上下文创建一个变量。在构造函数中,设置作为参数传递到此变量的上下文。获取共享首选项时使用此变量
注意:某些适配器类具有可使用的getContext()
方法。请详细说明“this”指针实际是什么。“this”指的是当前活动。是的,但如何使用?查看其他响应我也尝试过getApplicationContext(),但为什么不起作用?适配器类及其构造函数是什么?它是否有getContext()
方法?您可以使用that.public CustomAdapterSettings(Context Context){this.Context=Context;listViewSettingsActivity=new listViewSettingsActivity();layInflater=(LayoutFlater)Context.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);}//这是适配器的构造函数,现在开始,使用传递给构造函数的context
。将其保存在类变量中并用于获取首选项。您需要我将“上下文”传递给函数吗??