gpt4 book ai didi

Android - 致命异常 : main when adding subList

转载 作者:行者123 更新时间:2023-11-30 02:19:15 27 4
gpt4 key购买 nike

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

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();
}
}

但是,当通过将函数更改为此来添加子列表时:

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();
}
}

它会产生以下错误:

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)

谁能告诉我我做错了什么?

最佳答案

问题出在这里:

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

如果listItems , 为空或少于四个元素 subList 抛出 IndexOutBoundException .更准确地说,它抛出 IndexOutBoundException什么时候(fromIndex < 0 || toIndex > size || fromIndex > toIndex) .

编辑:

I would like to put the title in the "Normal" list, and the date of the message in the sublist like this:

为此,您可以使用一个类,它有两个公共(public)字段,标题和副标题。例如

 public class Information {
public String mTitle;
public String mSubtitle;
}

在你的 for 循环中你可以:

  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 的对象.在这种情况下,您需要的所有信息都由信息对象保存,从而减少了此类问题

关于Android - 致命异常 : main when adding subList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28833122/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com