我正在学习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次。
答案 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]
实际使用该参数。