[英]Index out of bounds exception in android
附件代码出现以下错误。 这里的问题是,即使退出“ for”循环,该线程仍在运行。 我要做的就是单击一个按钮,就将一堆文件上传到云中。 ListofDocs[]
是我要上传的文件列表的存储位置。 任何帮助表示赞赏。 TIA。
11-03 21:23:27.793: E/AndroidRuntime(24480): FATAL EXCEPTION: Thread-11897
11-03 21:23:27.793: E/AndroidRuntime(24480): java.lang.ArrayIndexOutOfBoundsException: length=12; index=12
11-03 21:23:27.793: E/AndroidRuntime(24480): at com.projects.scloud.PicsList$1$1.run(PicsList.java:99)
11-03 21:23:27.793: E/AndroidRuntime(24480): at java.lang.Thread.run(Thread.java:856)
for(i=0; i < ListofDocs.length; i++) {
Log.i("Value of i: ", String.valueOf(i));
MessageText.setText("Upload Documents");
/************* Php script path ****************/
upLoadServerUri = "http://www.androidexample.com/media/UploadToServer.php";
Backup.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog = ProgressDialog.show(DocsList.this, "", "Uploading file...", true);
new Thread(new Runnable() {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
MessageText.setText("uploading started.....");
}
});
uploadFile(ListofDocs[i]);
}
}).start();
}
});
}
为了编译代码, i
必须是一个实例变量,而不是局部变量。 这意味着ListofDocs[i]
将在线程主体实际执行的时间点引用该实例变量的值。 但这种可能性很小,这将是后外循环增加了i
对ListofDocs.length
。 因此,数组索引超出范围。
您不应使用实例变量。 相反,您应该使用final
局部变量。 例如
for(int i=0; i < ListofDocs.length; i++) {
final int final_i = i;
...
// in the anonymous inner class
uploadFile(ListofDocs[final_i]);
}
我将循环从线程外更改为线程内。 由于线程仅执行一次,因此我的代码仅执行一次并且正在增加数组元素。 该代码现在可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.