我正在學習有關Java和Android中的Loops,但我已經碰到了一堵牆。For Loop返回循環中的最後一個值
我的代碼:
//01
for (String FilesToDownload : Download)
{
myFILEposter = FilesToDownload;
fileP();
}
//02
private void fileP() {
// TODO Auto-generated method stub
System.out.println("Downloading Poster: " +myFILEposter);
new DownloadFileFromURL2().execute(file_url2 +myFILEposter);
}
//03
class DownloadFileFromURL2 extends AsyncTask<String, String, String> {
...
@Override
protected String doInBackground(String... f_url) {
System.out.println("Downloading Poster: " +myFILEposter);
...
請注意,我有兩個打印出來,一個在// 02,另一個在03 //應打印相同的輸出,它工作在// 02,但不// 03。這是它打印輸出:
//02
file1
file2
file3
和
//03
file3
file3
file3
在doInBackground輸出走的是最後一個值的循環,因此下載的最後一個文件的3倍。
您的doInbackground正在使用'myfileposter'作爲輸出,而不是作爲參數傳遞給該方法......所以它從該函數的OUTSIDE中拉取該變量。 doinbackground是一個異步任務,所以在它啓動的時候,你的循環已經完成,並且你最終使用myfileposter中的最後一個值。 –
但是doinbackground是從for循環中調用3次不同的值,無論如何,任何想法我怎麼能夠完成我所需要的? – user3560827
但函數不會在您調用它的確切時刻運行 - 它是異步執行的。因爲你沒有傳遞你想要處理的值,所以函數到達「外部」來獲得該值。它在執行時間執行,而不是調用時間。 –