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

Изменить List на ArrayList. По мере того как сообщение говорит вам, вы не можете бросить в Map из List здесь

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

посмотреть на this SO answer

+0

Изменение его к ArrayList не работал ... –