2013-12-15 122 views
3
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 

import android.os.AsyncTask; 
import android.util.Log; 

public class IssueDownload extends AsyncTask<IRPack, Void, IRPack> { 
    public static final String TAG = "IssueDownload"; 
    public String path = null; 
    public IRIssue issue = null; 

    @Override 
    protected IRPack doInBackground(IRPack... parms) { 
     InputStream input = null; 
     OutputStream output = null; 
     HttpURLConnection connection = null; 
     issue = Broker.model.issueDataStore.getIRIssue(parms[0].pubKey); 

     try {  
      File downloadFile = new File(IRConstant.issueFolder(issue.year, issue.month, issue.day, issue.pubKey) + "/" + parms[0].currPage + ".zip"); 

      if (!downloadFile.exists()) { 
       path = IRConstant.downloadFile(issue.year, issue.month, issue.day, issue.pubKey, "content", "" 
         + parms[0].currPage); 
       URL url = new URL(path); 

       Log.d (TAG,"input: " + path); 

       connection = (HttpURLConnection) url.openConnection(); 
       connection.connect(); 

       if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) 
        return null; 
       // return "Server returned HTTP " + connection.getResponseCode() 
       // + " " + connection.getResponseMessage(); 

       // download the file 
       input = connection.getInputStream(); 
       output = new FileOutputStream(IRConstant.issueFolder(issue.year, issue.month, issue.day, issue.pubKey) + "/" + parms[0].currPage + ".zip"); 

       Log.d (TAG,"output: " + output); 

       byte data[] = new byte[1024]; 
       int count; 
       while ((count = input.read(data)) != -1) { 
        output.write(data, 0, count); 
       } 
      } 
     } catch (Exception e) { 
      // return e.toString(); 
      return null; 
     } finally { 
      try { 
       if (output != null) 
        output.close(); 
       if (input != null) 
        input.close(); 
      } catch (IOException ignored) { 
      } 

      if (connection != null) 
       connection.disconnect(); 

     } 
     return parms[0]; 
    } 

    @Override 
    protected void onPostExecute(IRPack pack) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(pack); 
     pack.downloadPackComplete(); // Unzip completed pack 
    } 
} 

我目前正在使用此下載類,如果連接失敗,重試連接,如果重試2次後連接失敗,請重新連接。謝謝當連接丟失時異步任務下載器將失敗

回答

0

如果你的文件沒有下載,你將使你自己的邏輯打2下載文件,因爲當網絡將斷開連接,然後下載將停止。

1

首先要做的是在提出請求之前檢查連接性。

ConnectivityManager connMgr = (ConnectivityManager) 
     getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     // fetch data 
    } else { 
     // display error 
    } 

二:

private String downloadUrl(String myurl) throws IOException { 
    InputStream is = null; 
    // Only display the first 500 characters of the retrieved 
    // web page content. 
    int len = 500; 

    try { 
     URL url = new URL(myurl); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(10000 /* milliseconds */); 
     conn.setConnectTimeout(15000 /* milliseconds */); 
     conn.setRequestMethod("GET"); 
     conn.setDoInput(true); 
     // Starts the query 
     conn.connect(); 
     int response = conn.getResponseCode(); 
     Log.d(DEBUG_TAG, "The response is: " + response); 
     is = conn.getInputStream(); 

     // Convert the InputStream into a string 
     String contentAsString = readIt(is, len); 
     return contentAsString; 

    // Makes sure that the InputStream is closed after the app is 
    // finished using it. 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 
} 

使您的代碼的一部分拋出IOException如上圖所示

+0

謝謝,我已經使用try catch來敬酒的警告,但是,我該怎麼處理如果用戶再次連接?謝謝 – user782104

+0

您可以設置廣播接收器來接收連接重新建立事件或手動編寫代碼以在定時器任務內ping服務器並在其中執行代碼。 –