【问题标题】:ClassCastException on SimpleAdapter in AndroidAndroid 中 SimpleAdapter 上的 ClassCastException
【发布时间】:2013-04-22 22:31:50
【问题描述】:

我正在尝试在我的 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&lt;? extends Map&lt;String, ?&gt;&gt;),我会收到一个错误,迫使我强制转换它。我不太确定在这里做什么。

这是我的 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

【问题讨论】:

    标签: java android classcastexception listadapter simpleadapter


    【解决方案1】:

    这就是SimpleAdapter 正在寻找的东西。 构造函数

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

    其中 data 是列表:

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

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

    【讨论】:

      【解决方案2】:

      将您的 List 更改为 ArrayList。正如消息告诉你的那样,你不能在这里从List 转换为Map

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

      看看this SO answer

      【讨论】:

        猜你喜欢
        • 2014-03-23
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        相关资源
        最近更新 更多