0

我只有一个窗口,您可以在其中推送菜单-> 首选项并启动Intent

@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:
android 上的java.lang.Integer .app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
在 android.app.ActivityThread.access$2200(ActivityThread.java:119)
在 android.app.ActivityThread $H.handleMessage(ActivityThread.java:1863)
在 android.os.Handler.dispatchMessage(Handler.java:99)
在 android.os.Looper.loop(Looper.java:123)
在 android.app.ActivityThread.main(ActivityThread.java:4363)
在 java.lang.reflect.Method.invokeNative(Native Method)
在 java.lang.reflect.Method.invoke(Method.java:521)
在 com.android .internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
引起:java.lang.ClassCastException: java.lang.Integer at android.app.ApplicationContext$SharedPreferencesImpl.getString(ApplicationContext.java:2572) at android.preference.Preference.getPersistedString(Preference.java:1250) at android.preference .ListPreference.onSetInitialValue(ListPreference.java:232) 在 android.preference.Preference.dispatchSetInitialValue(Preference.java:1173) 在 android.preference.Preference.onAttachedToHierarchy(Preference.java:985) 在 android.preference.PreferenceGroup.addPreference( PreferenceGroup.java:156) 在 android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:97) 在 android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:38) 在 android.preference.GenericInflater。rInflate(GenericInflater.java:488) 在 android.preference.GenericInflater.rInflate(GenericInflater.java:493) 在 android.preference.GenericInflater.inflate(GenericInflater.java:326) 在 android.preference.GenericInflater.inflate(GenericInflater.java :263) 在 android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:254) 在 android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:253) -> 在 com.example.app.PreferenciasGenerales.onCreate(PreferenciasGenerales.java: 34) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) ... 还有 11 个rInflate(GenericInflater.java:493) 在 android.preference.GenericInflater.inflate(GenericInflater.java:326) 在 android.preference.GenericInflater.inflate(GenericInflater.java:263) 在 android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java :254) 在 android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:253) -> 在 com.example.app.PreferenciasGenerales.onCreate(PreferenciasGenerales.java:34) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) ... 还有 11 个rInflate(GenericInflater.java:493) 在 android.preference.GenericInflater.inflate(GenericInflater.java:326) 在 android.preference.GenericInflater.inflate(GenericInflater.java:263) 在 android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java :254) 在 android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:253) -> 在 com.example.app.PreferenciasGenerales.onCreate(PreferenciasGenerales.java:34) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) ... 还有 11 个inflate(GenericInflater.java:263) 在 android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:254) 在 android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:253) -> 在 com.example.app.PreferenciasGenerales.onCreate (PreferenciasGenerales.java:34) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) ... 11 更多inflate(GenericInflater.java:263) 在 android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:254) 在 android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:253) -> 在 com.example.app.PreferenciasGenerales.onCreate (PreferenciasGenerales.java:34) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) ... 11 更多34) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) ... 还有 11 个34) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) ... 还有 11 个

我要启动的 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...

您需要的更多与 PreferenceActivity 相关的东西......我已经删除了所有 strings.xml 值,因为它们太多并且是西班牙语。标题、提示、对话框标题等所有字符串都存在并且是正确的。他们从事其他活动

/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>

/res/values/preferencias_general.xml

<?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 在回答@CommonsWere 我清除了数据,它显示它不完整:

清除应用程序设置时的 ListPreference

在此之前,我尝试退出并引发新的异常:

java.lang.RuntimeException:无法停止活动 {com.merinosa.kimera/com.merinosa.kimera.PreferenciasGenerales}:java.lang.IllegalStateException:目标主机不得为空,或在参数中设置。在 android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3421) 在 android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3487) 在 android.app.ActivityThread.access$2800(ActivityThread.java:119) 在 android.app .ActivityThread$H.handleMessage(ActivityThread.java:1896) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:123) 在 android.app.ActivityThread。 main(ActivityThread.java:4363) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java: 521) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 在 dalvik.system.NativeStart.main (Native Method) Caused by: java.lang.IllegalStateException: Target host不能为null,或者在参数中设置。在 org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:561) 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:292) 在 org.apache.http.impl .client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient .java:465) 在 com.

那我应该在哪里测试配置是否正确?如果我再次运行应用程序,它会再次出现第一个错误。

--

更新 2

我的新错误与我原来的问题无关,因此可以将其设置为已回答。错误再次出现的原因是因为我按照 CommonsWare 在接受的答案中所说的那样修改了设置。
当我退出设置时,它执行 onStop() 并将 SharedPreferences 修改为整数,使其“不可种姓”。

必须对新错误进行适当调查,并在需要时再次询问。

4

1 回答 1

3

这个应用程序,在您用于测试的任何设备或模拟器上,已经保存了SharedPreferences,其中保存的值为 an Integer,您现在正尝试将其加载到Preference需要 a 的 a 中String。尝试通过设置清除应用程序的数据,或卸载并重新安装应用程序,以清除此问题。

此外,请注意,在您当前的偏好 XML 中,debug_level将保存为String.,但您正尝试通过getInt().

于 2012-11-16T12:24:28.043 回答