0

docsに従って、簡単な設定アクティビティ画面を作成しようとしています。オプションメニューボタンが押されたときに起動するように設定しましたが、トリガーするとアプリがクラッシュし、次の役に立たないランタイム例外メッセージが表示されます。

07-29 21:42:28.879: E/AndroidRuntime(13441): FATAL EXCEPTION: main
07-29 21:42:28.879: E/AndroidRuntime(13441): java.lang.RuntimeException: Unable to start activity ComponentInfo{myapp/myapp.ApplicationPreferenceActivity}: java.lang.ClassCastException: java.lang.Integer
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2737)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2753)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread.access$2500(ActivityThread.java:129)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2107)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.os.Looper.loop(Looper.java:143)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread.main(ActivityThread.java:4701)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at java.lang.reflect.Method.invokeNative(Native Method)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at java.lang.reflect.Method.invoke(Method.java:521)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at dalvik.system.NativeStart.main(Native Method)
07-29 21:42:28.879: E/AndroidRuntime(13441): Caused by: java.lang.ClassCastException: java.lang.Integer
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ContextImpl$SharedPreferencesImpl.getString(ContextImpl.java:2797)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.Preference.getPersistedString(Preference.java:1249)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.ListPreference.onSetInitialValue(ListPreference.java:232)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.Preference.dispatchSetInitialValue(Preference.java:1172)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at andr
oid.preference.Preference.onAttachedToHierarchy(Preference.java:984)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.PreferenceGroup.addPreference(PreferenceGroup.java:156)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:97)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:38)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.GenericInflater.rInflate(GenericInflater.java:488)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.GenericInflater.inflate(GenericInflater.java:326)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.GenericInflater.inflate(GenericInflater.java:263)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:251)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:262)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at myapp.ApplicationPreferenceActivity.onCreate(ApplicationPreferenceActivity.java:71)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-29 21:42:28.879: E/AndroidRuntime(13441):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2701)
07-29 21:42:28.879: E/AndroidRuntime(13441):    ... 11 more

私の環境設定ファイルは単純です:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:title="@string/preferences_title" >
    <ListPreference
        android:defaultValue="1"
        android:entries="@array/units_choices"
        android:entryValues="@array/units_values"
        android:key="units"
        android:summary="@string/units_summary"
        android:title="@string/units_title" />
</PreferenceScreen>

私は、それぞれ res/values/array.xml と res/values/array_values.xml で定義された units_choices と units_values を持っています。

<resources
   xmlns:android="http://schemas.android.com/apk/res/android">
   <string-array
      name="units_choices">
      <item>Imperial (miles)</item>
      <item>Metric (meters)</item>
   </string-array>
</resources>

<resources
    xmlns:android="http://schemas.android.com/apk/res/android">
    <string-array name="units_values" translatable="false">
        <item>2</item>
        <item>1</item>
    </string-array>
</resources>

ListPreference タグをコメント アウトすると、設定画面が表示され、アプリがクラッシュしないため、ListPreference が正しく構成されていないと想定しています。私は何を間違っていますか?Eclipse IDE を使用して開発していますが、すべての @ 参照が満たされていることが示されています。この 1 つのタグでアプリ全体がクラッシュするのはなぜですか?

4

3 に答える 3

0

1.まず、ClassCastException間違ったタイプのオブジェクトを UN 互換タイプのオブジェクト参照変数にプッシュしようとすると、 が発生します。こちらにコードを掲載していないため、検出できません。

2. Preference Activity について学習しているので、このリンクを参照することをお勧めします。

http://androidresearch.wordpress.com/2012/03/09/creating-a-preference-activity-in-android/

于 2012-07-30T04:35:36.843 に答える
0

これは答えではありませんが、コメントには少し大きかったです。

setContentView myapp.ApplicationPreferenceActivity.onCreate(ApplicationPreferenceActivity.java:71)() を呼び出している ApplicationPreferenceActivity の行だと思いますか? したがって、これは xml インフレート エラーです。

あなたのxmlファイルに関するいくつかのこと。電話する必要はありません:

android:layout_width="match_parent"
android:layout_height="match_parent"

docsの例のように。

また、どの API レベルを使用していますか? API レベル 11 から、PreferenceActivity クラスの多くが非推奨になり、代わりに PreferenceFragments を使用していることをご存知ですか? したがって、Pre Android 3.0 をサポートする場合は PreferenceActivity を使用できますが、3.0 以降をサポートする場合はPreferenceFragmentsを使用する必要があります。

于 2012-07-30T02:43:52.490 に答える
0

この問題はunit、アクティビティの onCreate で putInt を使用してデフォルト設定を設定したことが原因で発生しましたunits_valuesが、整数でも文字列として解釈されるようです。ListPreference がデフォルトの int を文字列としてロードしようとすると、ClassCastException がスローされました。

putString を使用するように onCreate のコードを変更し、インストール済みアプリのデータをクリアしたところ、問題が解決しました。

于 2012-07-30T14:41:07.950 に答える