0

Android アプリケーションでアラームのリストを表示しようとしていますが、例外が発生します。どうすればこれを解決できますか?

これは私がアダプタを初期化しようとしているところです:

    List<Alarm> list;
    Database db = new Database(AlarmListActivity.this);
    list = db.getAllAlarms();

    if(!list.isEmpty() && list != null)
    {
        System.out.println("inside list");
        System.out.println(list);

        ListAdapter adapter = new SimpleAdapter(
                AlarmListActivity.this,
                (List<? extends Map<String, ?>>) list,
                R.layout.list_item, 
                new String[] { "id", "time"},
                new int[] { R.id.id, R.id.time});
        setListAdapter(adapter);

    }

リスト変数(List<? extends Map<String, ?>>)をキャストしないと、強制的にキャストするエラーが発生します。ここで何をすべきかよくわかりません。

これは私のLogCatです:

04-22 22:26:20.192: E/AndroidRuntime(1697): FATAL EXCEPTION: main
04-22 22:26:20.192: E/AndroidRuntime(1697): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.wakeup/com.example.wakeup.AlarmListActivity}: java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.List
04-22 22:26:20.192: E/AndroidRuntime(1697):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at android.os.Looper.loop(Looper.java:137)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at android.app.ActivityThread.main(ActivityThread.java:5041)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at java.lang.reflect.Method.invokeNative(Native Method)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at java.lang.reflect.Method.invoke(Method.java:511)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at dalvik.system.NativeStart.main(Native Method)
04-22 22:26:20.192: E/AndroidRuntime(1697): Caused by: java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.List
04-22 22:26:20.192: E/AndroidRuntime(1697):     at com.example.wakeup.AlarmListActivity.onCreate(AlarmListActivity.java:53)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at android.app.Activity.performCreate(Activity.java:5104)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-22 22:26:20.192: E/AndroidRuntime(1697):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
04-22 22:26:20.192: E/AndroidRuntime(1697):     ... 11 more
04-22 22:26:26.472: I/Process(1697): Sending signal. PID: 1697 SIG: 9
4

2 に答える 2

1

それがSimpleAdapterが探しているものです。コンストラクタ

public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

data は次のリストです:

マップのリスト。リスト内の各エントリは、リスト内の 1 つの行に対応します。マップには各行のデータが含まれており、「from」で指定されたすべてのエントリが含まれている必要があります。

あなたのソリューション、ListViewのアイテムのオブジェクトをレンダリングする場合は、他のアダプターを使用する必要があります。または、Alarm オブジェクトを Map に変換できます。

于 2013-04-22T22:39:33.967 に答える
0

に変更ListしますArrayList。メッセージが伝えているように、ここMapから aにキャストすることはできませんList

(List<? extends Map<String, ?>>) list,

このSOの答えを見てください

于 2013-04-22T22:40:16.933 に答える