在执行List.remove(index),程序崩溃
基本流程,数组转化为list:
imgList = Arrays.asList(字符串数组);
然后直接list执行remove():
imgList.remove(index);
抛出异常:
Process: com.keqing.okhttptest, PID: 16036 java.lang.UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:638) at com.keqing.okhttptest.glide.ImageViewActivity$1.onClick(ImageViewActivity.java:46) at android.view.View.performClick(View.java:4438) at android.view.View$PerformClick.run(View.java:18422) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5045) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method)
问题原因:
这是由于Arrays.asList() 返回java.util.Arrays ArrayList,而不是ArrayList。Arrays ArrayList和ArrayList都是继承AbstractList,remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(),add()等,所以throw UnsupportedOperationException。
解决方法:
for (String s:字符串数组)
{
imgList.add(s);
}
或者:
imgList = Arrays.asList(字符串数组);
imgList = new ArrayList(imgList);
或者使用 Iterator 具体用法请移步:戳一下
按这三种方法写,再执行remove()就正常了,如果还有其他方法,请博友指教。