For Loop返回循环中的最后一个值

时间:2015-06-25 20:57:12

标签: java android

我正在学习Java和Android中的For循环,但我已经碰壁了。

我的代码:

    //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次。

1 个答案:

答案 0 :(得分:0)

这段代码相当可怕,没有冒犯。首先,变量是小写,而类名是大写。其次,方法可以采用参数。为函数中的访问分配全局变量简直太愚蠢了。但是然后你将这个错误传播到你的AsyncTask中,这就是整个事情失败的原因。清理这个烂摊子,你会得到以下内容:

// oh, please-oh-please, change Download to filesToDownload
for( String aFile : Download ) {
    downloadFile( aFile );
}

private void downloadFile( String whichFile ) {
    System.out.println( "Downloading Poster: " + whichFile );
    new DownloadFileFromURL2().execute( file_url2 + whichFile );
}               


class DownloadFileFromURL2 extends AsyncTask<String, String, String> {
    ...

@Override
protected String doInBackground( String... url ) {

    System.out.println("Downloading Poster: " + url[0] );

    ...

因此,首先将文件作为字符串传递给您的downloadFile()方法。然后将该字符串传递到AsyncTask ...然后通过访问url[0] 实际使用该参数。