gpt4 book ai didi

java - android中的索引越界异常

转载 作者:行者123 更新时间:2023-11-30 03:17:41 25 4
gpt4 key购买 nike

我收到附加代码的以下错误。这里的问题是线程即使在退出“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]);
}

关于java - android中的索引越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19754984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com