2016-05-17 47 views
1

我的應用程序要依次下載文件,但它顯示了E /錯誤:文件== NULL下載文件順序

logcat的

05-17 16:50:00.225 20952-21052/shiweichen22gmail.q4 E/Error: file == null 
05-17 16:50:02.820 20952-21052/shiweichen22gmail.q4 E/Error: file == null 
05-17 16:50:05.146 20952-21052/shiweichen22gmail.q4 E/Error: file == null 
05-17 16:50:07.676 20952-21052/shiweichen22gmail.q4 E/Error: file == null 
05-17 16:50:10.655 20952-21052/shiweichen22gmail.q4 E/Error: file == null 

我認爲這個問題是在

the protected String doInBackground(String... Url) 

部分 如果我下載一個文件,它的工作原理。但對於多個文件。我如何設置文件路徑並修復我的代碼。非常感謝

Mainactivity.java

package shiweichen22gmail.q4; 

import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Environment; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Button; 
import java.io.BufferedInputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.URL; 
import java.net.URLConnection; 


public class MainActivity extends AppCompatActivity { 
ProgressDialog mProgressDialog; 
Button button; 
String[] URL = {"https://www.dropbox.com/s/gjq0ivomwti4vmw/1.txt?dl=1&pv=1", 
     "https://www.dropbox.com/s/6lolv2ph08wt657/2.txt?dl=1&pv=1", 
"https://www.dropbox.com/s/voz5vmnjkzojb14/3.txt?dl=1&pv=1", 
"https://www.dropbox.com/s/wv6hika6v2pfakz/4.txt?dl=1&pv=1", 
"https://www.dropbox.com/s/7jhtlzfuz2j42d8/5.txt?dl=1&pv=1"}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    button = (Button) findViewById(R.id.Button); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      new DownloadFile().execute(URL); 
     } 
    }); 
} 
private class DownloadFile extends AsyncTask<String, Integer, String> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressDialog = new ProgressDialog(MainActivity.this); 
     mProgressDialog.setTitle("Downloading"); 
     mProgressDialog.setMessage("Downloading, Please Wait!"); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.setMax(100); 
     mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     mProgressDialog.show(); 
    } 
    @Override 
    protected String doInBackground(String... Url) { 
     int count; 
     File file = null; 
     int i = 0; 
     while (i < 5) { 
     try { 
      URL url = new URL(Url[i]); 
      URLConnection connection = url.openConnection(); 
      connection.connect(); 
      int fileLength = connection.getContentLength(); 
      String filepath = Environment.getExternalStorageDirectory() 
        .getPath(); 
      InputStream input = new BufferedInputStream(url.openStream()); 
      FileOutputStream output = new FileOutputStream(file); 
      file = new File(filepath + "/" 
        + i+".txt"); 
      byte data[] = new byte[1024]; 
      long total = 0; 

      while ((count = input.read(data)) != -1) { 
       total += count; 
       publishProgress((int) (total * 100/fileLength)); 
       output.write(data, 0, count); 
      } 
      output.flush(); 
      output.close(); 
      input.close(); 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
      publishProgress(i+1); 
      i++; 
    } 
     return null; 
    } 
    @Override 
    protected void onProgressUpdate(Integer... progress) { 
     super.onProgressUpdate(progress); 
     mProgressDialog.setProgress(progress[0]); 
    } 
} 
} 
+0

僅供參考:這裏有很棒的下載庫https://github.com/lingochamp/FileDownloader –

回答

0
FileOutputStream output = new FileOutputStream(file); 
file = new File(filepath + "/" + i+".txt"); 

file是在第一次迭代空,因爲異常的保持爲空。在創建輸出流之前,您應該初始化變量file