【发布时间】:2016-03-31 09:08:43
【问题描述】:
我正在使用AsyncTask 来检查Fragment 是否已被替换。发生此错误时会出现问题,因为我没有使用ArrayList。
崩溃很少发生,并且发生在循环中的 AsyncTask 内。
这是错误:
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at android.support.v4.app.FragmentManagerImpl.findFragmentById(FragmentManager.java:1446)
at com.runator.ui.newdesign.MainActivity$WaitForChangeFragment.doInBackground(MainActivity.java:1035)
at com.runator.ui.newdesign.MainActivity$WaitForChangeFragment.doInBackground(MainActivity.java:1027)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
这是发生错误的代码:
@Override
protected String doInBackground(String... params) {
Fragment auxCurrentFragment = getSupportFragmentManager().findFragmentById(ID_FRAME_LAYOUT);
while (auxCurrentFragment instanceof FilterNavigationFragment) {
auxCurrentFragment = getSupportFragmentManager().findFragmentById(ID_FRAME_LAYOUT);
}
return "Executed";
}
只有我这样说: auxCurrentFragment = getSupportFragmentManager().findFragmentById(ID_FRAME_LAYOUT);
如果有任何想法请帮助我,在此先感谢。
【问题讨论】:
-
记住索引计数从索引 0 开始
-
我认为他指出的事实是,错误消息说明了实际问题是什么:请求大小为 3 的 ArrayList 以返回索引为 3 的项目 - 这是不可能的,因为索引从 " 0”。所以最高索引是“2”。但这对你没有帮助。不知何故,片段管理器似乎将 ID 映射到内部片段列表的索引 3。所以错误在于没有更新这个。
-
但是你在哪里看到索引?我只看到 ID
-
@KonstantinsBogdanovs 在堆栈跟踪中:“无效索引 3,大小为 3”
-
:) 欢迎来到多线程世界!
标签: java android android-fragments android-asynctask indexoutofboundsexception