2013-04-22 55 views
0

我想在我的Android應用程序中顯示報警的列表,但我得到一個例外。我該如何解決這個問題?ClassCastException異常的SimpleAdapter在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 

回答

1

這就是SimpleAdapter所期待的。 構造

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

其中數據的列表:

地圖的列表。列表中的每個條目對應於 列表中的一行。地圖包含每行的數據,並應包含所有在「from」中指定的條目。

您的解決方案如果您想爲ListView中的項目呈現對象,則可以使用其他適配器。或者,您可以將Alarm對象轉換爲Map。

0

更改ListArrayList。由於消息告訴你,你不能從這裏List

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

轉換爲Map看看this SO answer

+0

將其更改爲一個ArrayList沒有工作... – 2013-04-22 22:48:00