0

2つのタブ付きアクティビティを持つアプリがあり、このコードを使用して2番目のタブでSharedPreferencesを取得しようとしています。
SharedPreferences prefs = this.getSharedPreferences("com.some.app", Context.MODE_PRIVATE);
ただし、アプリを強制終了します。最初のアクティビティで同じコードを使用すると、問題なく動作しSharedPreferencesます。これを引き起こしているアイデアはありますか?

Logcat:

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」を呼び出すと、タブアクティビティのコンテキストが返されます。なぜnullになるのかわかりません(59行目にあるidkのため、これはnullだと思います) 。

サブアクティビティごとに共有設定変数を開始するのではなく、メインアクティビティから1つの共有設定インスタンスを使用することをお勧めします(同じ設定を指している場合でも)

または、古いタブホストの代わりにViewPagerを使用することをお勧めします。

自分がしていることに固執したい場合は、this.getBaseContext()。getSharedPreferences()を試してください。

あなたのスミピットが正しいので、より多くの文脈情報はより良い答えを可能にするでしょう。

于 2012-06-19T21:29:53.113 に答える