gpt4 book ai didi

java - SharedPreferences 导致应用程序在 Android 中使用选项卡时强制关闭

转载 作者:行者123 更新时间:2023-12-01 15:19:48 25 4
gpt4 key购买 nike

我有一个具有 2 个选项卡式 Activity 的应用程序,我尝试使用以下代码在第二个选项卡上获取 SharedPreferences:
SharedPreferences prefs = this.getSharedPreferences("com.some.app", Context.MODE_PRIVATE);
但它使应用程序强制关闭,我在第一个 Activity 上使用相同的代码,它获得了 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

最佳答案

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

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

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

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

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

关于java - SharedPreferences 导致应用程序在 Android 中使用选项卡时强制关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11109438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com