首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -致命异常:当添加subList时

Android -致命异常:当添加subList时
EN

Stack Overflow用户
提问于 2015-03-03 13:32:52
回答 1查看 447关注 0票数 1

我目前正在开发我的第一个Android应用程序。它解析JSON数据并将其放入ListView (见下文)。

代码语言:javascript
复制
protected void onPostExecute(String result){

        try {
            JSONArray json = new JSONArray(result);

            for(int i = 0; i < json.length(); i++) {
                listItems.add(json.getJSONObject(i).getString(("title")));
                adapter.notifyDataSetChanged();
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

但是,当通过更改函数添加subList时:

代码语言:javascript
复制
protected void onPostExecute(String result){

        try {
            JSONArray json = new JSONArray(result);

            List subList = listItems.subList(1,3);

            for(int i = 0; i < json.length(); i++) {
                listItems.add(json.getJSONObject(i).getString(("title")));
                subList.add("Test");
                adapter.notifyDataSetChanged();
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

它会产生以下错误:

代码语言:javascript
复制
03-03 14:23:56.480  15414-15414/nl.mikehagendoorn.efteltijden E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: nl.mikehagendoorn.efteltijden, PID: 15414
java.lang.IndexOutOfBoundsException
        at java.util.AbstractList.subList(AbstractList.java:738)
        at nl.mikehagendoorn.efteltijden.Main$HttpAsyncTask.onPostExecute(Main.java:133)
        at nl.mikehagendoorn.efteltijden.Main$HttpAsyncTask.onPostExecute(Main.java:117)
        at android.os.AsyncTask.finish(AsyncTask.java:632)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

有人能告诉我我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-03 13:38:06

问题在于:

代码语言:javascript
复制
 List subList = listItems.subList(1,3);

如果是listItems,则为空或少于4个元素subList抛出IndexOutBoundException。更准确地说,它在IndexOutBoundException时抛出(fromIndex < 0 || toIndex > size || fromIndex > toIndex)

编辑:

我想将标题放在“普通”列表中,并在子列表中列出消息的日期如下:

为此,可以使用带有两个公共字段( title和subtitle )的类。例如。

代码语言:javascript
复制
 public class Information {
    public String mTitle;
    public String mSubtitle;
 }

在你的循环中你可以:

代码语言:javascript
复制
  for(int i = 0; i < json.length(); i++) {
     Information tmp = new Information();
     tmp.mTitle = son.getJSONObject(i).getString(("title"));
     tmp.mSubtitle = "..";
     listItems.add(tmp);
  }

当然,您必须相应地更改列表以接受Information类型的对象。在这种情况下,您需要的所有信息都由信息对象保存,从而减少了此类问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28833122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档