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)

其中数据是列表:

地图列表。列表中的每个条目对应于列表中的一行。Maps 包含每一行的数据,并且应该包括“from”中指定的所有条目。

您的解决方案,如果您想为 ListView 中的项目呈现对象,您可能会使用其他适配器。或者,您可以将警报对象转换为地图。

于 2013-04-22T22:39:33.967 回答
0

将您的更改ListArrayList. 正如消息告诉您的那样,您不能MapList此处转换为 a

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

看看这个 SO 答案

于 2013-04-22T22:40:16.933 回答