2
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)
4

2 に答える 2

5

この例外を処理するべきではありません。そもそも例外を引き起こさないコードを書くべきです。

空のリストを作成したところです。値を返すために渡すことができる値はありません。getリストのサイズは 0 であり、インデックスは 0 以上であり、サイズより厳密に小さいことを意味します。

さらに、 Java の命名規則に従って変数を作成すれば、コードは非常camelCasedに読みやすくなります。これにより、変数と型の両方に同じ名前が付けられることを回避できます。また、同じ変数名を 2 回使用しないでください...

CopyOnWriteArrayList<Options> allOptions = new CopyOnWriteArrayList<Options>();
// This will still fail for any value of selectedFilterIndex, as the list
// is empty... but at least it's easier to understand.
Options selectedOptions = allOptions.get(selectedFilterIndex);
于 2013-06-21T10:22:57.130 に答える
1

を宣言したばかりListで、まだ要素がありません。

CopyOnWriteArrayList<Options> Options= new CopyOnWriteArrayList<Options>();

そして、要素なしでget()からしようとしています。内部では配列バッファを使用して要素を格納します。Javadoc get(int index)によると:ListArrayList

スロー:

IndexOutOfBoundsException - インデックスが範囲外の場合 (index < 0 || index >= size())

したがって、次Options.get(selectedFilterIndex);の場合にのみ機能します(selectedFilterIndex>-1 && selectedFilterIndex < Options.size())

于 2013-06-21T10:22:39.673 に答える