当前位置: 首页 > 知识库问答 >
问题:

当用户试图打开PreferenceActivity时,应用程序崩溃

公羊喜
2023-03-14

我只有一个窗口,在那里你推菜单->首选项并启动一个意图

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_settings:
            startActivity(new Intent(this, com.example.app.PreferenciasGenerales.class));
            return true;
        default:
            return false;
    }
}

它自动地表示必须关闭应用程序。

未捕获的处理程序:由于未捕获的异常导致线程主退出
java.lang.runtimeException:无法启动活动ComponentInfo{com.example.app/com.example.app.PreferenciasGenerales}:
java.lang.ClassCastException:java.lang.Integer
在Android.app.activitythread.performLaunchActivity(activitythread.java:2496)
在Android.app.activitythread.handlelaunchActivity ActivityThread$H.HandleMessage(ActivityThread.java:1863)
在Android.os.handler.DispatchMessage(handler.java:99)
在Android.os.handler.dispatchMessage(handler.java:99)
在Android.os.looper.loop(looper.java:123)
在Android.app.activityThread.main(activityThread.java:4363)
在java:860)
位于com.android.internal.os.zygoteinit.main(zygoteinit.java:618)
at dalvik.system.nativestart.main(原生方法)
由:java.lang.classcastException:java.lang.Integer在Android.app.applicationContext$sharedPreferencesImpl.getString(ApplicationContext.java:2572)在Android.preference.preference.preference.getPersistedString(preference.java:1250)在Android.preference.preference.java:1250)在(preferenceGroup.java:156)在Android.preference.preference.additemfrominflater(preference.preference.preference.preference.java:97)在Android.preference.preference.preference.additemfrominflater(preference.preference.java:38)在Android.preference.genericinflater.rinflate(genericinflater.java:488)在在Android.preference.preference.preferenceActivity.addPreferencesFromResource(PreferenceActivity.addPreferencesFromResource(PreferenciasGenerales.onCreate(PreferenciasGenerales.java:34),在Android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459),在Android.preference.preference.java:263),在

我要启动的PreferenceActivity如下:

public class PreferenciasGenerales extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    /*->*/addPreferencesFromResource(R.xml.preferencias_general);/*<- Here is the exception at StackTrace */
    }

    @Override
    protected void onStop() {
        final ProgressDialog waitDialog =
            ProgressDialog.show( this, "Wait", "i'm testing that those things you write are correct...", true);
        waitDialog.setCancelable(false);
        /* Cannot have integers array on ListPreference
         * http://code.google.com/p/android/issues/detail?id=2096 */
        String old_debug_level = PreferenceManager.getDefaultSharedPreferences(this).getString("debug_level", "3");
        PreferenceManager.getDefaultSharedPreferences(this).edit()
        .remove("debug_level")
        .putInt("debug_level", Integer.parseInt(old_debug_level))
        .commit();
    old_debug_level = null;

    String api_server = PreferenceManager.getDefaultSharedPreferences(PreferenciasGenerales.this).getString("api_server", "");
    String account_id = PreferenceManager.getDefaultSharedPreferences(PreferenciasGenerales.this).getString("account_id", "");
    String account_pass = PreferenceManager.getDefaultSharedPreferences(PreferenciasGenerales.this).getString("account_pass", "");
    String account_key = PreferenceManager.getDefaultSharedPreferences(PreferenciasGenerales.this).getString("account_key", "");
    boolean debug_enabled= PreferenceManager.getDefaultSharedPreferences(PreferenciasGenerales.this).getBoolean("debug_enabled", false);
    int debug_level = PreferenceManager.getDefaultSharedPreferences(PreferenciasGenerales.this).getInt("debug_level", 3);

    try {
                 // Connect to API to test credentials...

你需要的更多与优先活动相关的东西...我删除了所有的strings.xml值,因为它们太多了,而且是西班牙语。所有字符串如title、hint、dialogTitle都存在且正确。他们从事其他活动

/res/xml/preferencias_general.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory>
        <EditTextPreference android:key="api_server"/>
    </PreferenceCategory>
    <PreferenceCategory android:title="@string/preferencias_cuenta_categoria_title">
        <EditTextPreference android:key="account_id"  />
        <EditTextPreference android:key="account_pass" />
        <EditTextPreference android:key="account_key"  />
    </PreferenceCategory>
        <PreferenceCategory android:key="debug_enabled" />
        <ListPreference android:key="debug_level" android:entryValues="@array/debug_level_entryValues" android:entries="@array/debug_level_entries" />
</PreferenceCategory>
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="debug_level_entries">
        <item>VERBOSE</item>
        <item>DEBUG</item>
        <item>INFO</item>
        <item>WARN</item>
        <item>ERROR</item>
    </string-array>
    <string-array name="debug_level_entryValues">
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
   </string-array>

--

更新1回答@commons,我删除了数据,它显示它不完整:

在此之前,我尝试退出,然后出现一个新的异常

共有1个答案

蒋嘉颖
2023-03-14

此应用程序,无论在您用于测试的设备或模拟器上,都已经保存了SharedPreferences,其中保存的值是整数,您现在正试图将其加载到首选项中,该首选项需要字符串。尝试通过设置清除应用程序的数据,或者卸载并重新安装应用程序,以清除此问题。

另外,请注意,在当前首选项XML中,debug_level将保存为字符串,但您试图通过getint()检索它。

 类似资料:
  • 下面给出的错误 process:com.example.rahul.maptask,pid:21986 java.lang.runtimeException:无法启动活动ComponentInfo{com.example.rahul.maptask/com.example.rahul.maptask.mainactivity}:java.lang.nullpointerException:试图在A

  • 我尝试在1个应用程序中构建扫描仪和生成器。当我按下发电机按钮时,它突然崩溃了。我的日志中没有任何错误或警告。 这是我的生成器代码: 主活动代码: 有人知道怎么解决这个问题吗?请帮帮我。 更新 以下是我的生成器xml代码: 我希望这将有助于我的问题:( 更新:这是由我愚蠢的打字错误修正;)。非常感谢迄今为止所有回答我问题的人。我说不出我有多感激。特别是对于那个我已经投票支持正确答案的家伙。你真是个英

  • 在我的应用程序中,有一个使用相机捕捉图像的工具。在Android6之前的所有版本中,它都能完美地工作,但在Android7.0版本中,它让我的应用程序崩溃了。 添加的权限 权限侦听器 打开相机的代码 崩溃日志 由:android.content.activityNotFoundException引起:未找到处理意图的活动{act=android.media.action.image_capture

  • 所以我目前正在努力开发一个应用程序,需要一个谷歌地图API。每当我尝试加载地图时,我的应用程序将我的地图实现为片段类的子类: 编辑:原来我只是错过了应该被引用的API键。我很抱歉提出了一个低质量的问题

  • 我做了一个SAX解析器,它接受输入流作为文件进行解析。如果我使用本地文件,它可以工作,但如果我试图从internet获取它,当它打开输入流时就会崩溃。 这里有代码: 我已经尝试了几种方法,我在其他问题中看到过,它总是在或类似的地方崩溃。 提前道谢。