0

我有一个带有 2 个选项卡式活动的应用程序,我正在尝试使用以下代码在第二个选项卡上获取 SharedPreferences:
SharedPreferences prefs = this.getSharedPreferences("com.some.app", Context.MODE_PRIVATE);
但它使应用程序强制关闭,我在第一个活动上使用相同的代码,它就可以了SharedPreferences!任何想法是什么导致了这个?

日志猫:

06-19 17:10:37.690: W/dalvikvm(6589): threadid=1: thread exiting with uncaught exception (group=0x40a031f8)
06-19 17:10:37.706: E/AndroidRuntime(6589): FATAL EXCEPTION: main
06-19 17:10:37.706: E/AndroidRuntime(6589): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.something.some/com.something.somehow}: java.lang.NullPointerException
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:1797)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:682)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.widget.TabHost.setCurrentTab(TabHost.java:346)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:150)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:540)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.view.View.performClick(View.java:3511)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.view.View$PerformClick.run(View.java:14105)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.os.Handler.handleCallback(Handler.java:605)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.os.Looper.loop(Looper.java:137)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.app.ActivityThread.main(ActivityThread.java:4424)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at java.lang.reflect.Method.invokeNative(Native Method)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at java.lang.reflect.Method.invoke(Method.java:511)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at dalvik.system.NativeStart.main(Native Method)
06-19 17:10:37.706: E/AndroidRuntime(6589): Caused by: java.lang.NullPointerException
06-19 17:10:37.706: E/AndroidRuntime(6589):     at com.someone.someapp.Statify.onCreate(Statify.java:59)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.app.Activity.performCreate(Activity.java:4465)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-19 17:10:37.706: E/AndroidRuntime(6589):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-19 17:10:37.706: E/AndroidRuntime(6589):     ... 18 more
4

1 回答 1

1

选项卡主机包含单独的活动(如果我没记错的话),所以当您调用“this”时,它会返回选项卡活动的上下文,为什么它为空我不确定(我假设这是空的,因为我知道第 59 行是什么) .

我的建议是使用主要活动中的一个共享首选项实例,而不是为每个子活动启动一个共享首选项变量(即使它们指向相同的首选项)

或者更好的是使用 ViewPager 而不是过时的 Tab Host。

如果你想坚持你正在做的事情,试试 this.getBaseContext().getSharedPreferences()

由于您的 smippit 是正确的,因此更多的上下文信息可以提供更好的答案。

于 2012-06-19T21:29:53.113 回答