CopyOnWriteArrayList<Options> Options= new CopyOnWriteArrayList<Options>();
Options Options = Options.get(selectedFilterIndex);
我收到上述行中的错误。 Options是一个ArrayList。我尝试使用ArrayList
以及CopyOnWriteArrayList
,但得到以下错误。如何处理此类例外。
06-21 15:28:23.257: E/XXX(8985): Uncaught exception is: 06-21 15:28:23.257: E/XXX(8985): java.lang.RuntimeException: An error occured while executing doInBackground() 06-21 15:28:23.257: E/XXX(8985): at android.os.AsyncTask$3.done(AsyncTask.java:278) 06-21 15:28:23.257: E/XXX(8985): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 06-21 15:28:23.257: E/XXX(8985): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 06-21 15:28:23.257: E/XXX(8985): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 06-21 15:28:23.257: E/XXX(8985): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 06-21 15:28:23.257: E/XXX(8985): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 06-21 15:28:23.257: E/XXX(8985): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 06-21 15:28:23.257: E/XXX(8985): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 06-21 15:28:23.257: E/XXX(8985): at java.lang.Thread.run(Thread.java:856) 06-21 15:28:23.257: E/XXX(8985): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 06-21 15:28:23.257: E/XXX(8985): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 06-21 15:28:23.257: E/XXX(8985): at java.util.ArrayList.get(ArrayList.java:304) 06-21 15:28:23.257: E/XXX(8985): at com.usercontext.CommonActivity$6.doInBackground(AppointmentsActivity5.java:354) 06-21 15:28:23.257: E/XXX(8985): at com.usercontext.CommonActivity$6.doInBackground(AppointmentsActivity5.java:1) 06-21 15:28:23.257: E/XXX(8985): at android.os.AsyncTask$2.call(AsyncTask.java:264) 06-21 15:28:23.257: E/XXX(8985): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
答案 0 :(得分:5)
您不应该处理此异常 - 您应该首先编写不会导致它的代码。
您刚刚创建了一个空列表 - 您可以传递给<{1}}的 no 值将返回一个值。该列表的大小为0,索引大于或等于0,严格小于大小。
此外,如果遵循创建变量get
的Java命名约定,那么您的代码将 更容易阅读 - 这将避免变量和类型具有相同的名称。还要避免两次使用相同的变量名...
camelCased
答案 1 :(得分:1)
您刚刚声明了List
,其中还没有元素。
CopyOnWriteArrayList<Options> Options= new CopyOnWriteArrayList<Options>();
你正试图从get()
List
而没有任何元素。 ArrayList
内部将使用数组缓冲区来存储元素。根据Javadoc get(int index):
<强>抛出:强>
IndexOutOfBoundsException - 如果索引超出范围(索引&lt; 0 || index&gt; = size())
因此Options.get(selectedFilterIndex);
仅适用于(selectedFilterIndex>-1 && selectedFilterIndex < Options.size())