簡體   English   中英

在Android中使用Tabs時,SharedPreferences導致應用強制關閉

[英]SharedPreferences causes app to force close when using Tabs in android

我有一個帶有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

Tab Host包含單獨的活動(如果我沒記錯的話),所以當您調用“ this”時,它返回Tab活動的上下文,為什么它為null我不確定(我假設它為null,因為idk第59行是什么) 。

我的建議是從您的主要活動中使用一個共享的偏好設置實例,而不是為每個子活動都啟動一個共享的偏好設置變量(即使它們指向相同的偏好)

最好還是使用ViewPager代替過時的Tab Host。

如果您想堅持自己的工作,請嘗試this.getBaseContext()。getSharedPreferences()

如果您的smippit是正確的,則更多的上下文信息將為您提供更好的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM