2016-03-28 15 views
0

APIからzipファイルをダウンロードしようとしています。 zipファイルは「hello1.zip」として作成され、このコードではAndroidからZipファイルをダウンロードする

public class Download_Activity extends Activity { 

public static final int DIALOG_DOWNLOAD_PROGRESS = 0; 
private Button startBtn; 
private ProgressDialog mProgressDialog; 

/** 
* Called when the activity is first created. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.download); 
    startBtn = (Button) findViewById(R.id.downloadButton); 

    startBtn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      startDownload(); 
     } 
    }); 
} 

private void startDownload() { 
    String url = downloadURL; 
    new DownloadFileAsync().execute(url); 
} 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
     case DIALOG_DOWNLOAD_PROGRESS: 
      mProgressDialog = new ProgressDialog(this); 
      mProgressDialog.setMessage("Downloading file.."); 
      mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      mProgressDialog.setCancelable(false); 
      mProgressDialog.show(); 
      return mProgressDialog; 
     default: 
      return null; 
    } 
} 

class DownloadFileAsync extends AsyncTask<String, String, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     showDialog(DIALOG_DOWNLOAD_PROGRESS); 
    } 

    @Override 
    protected String doInBackground(String... aurl) { 
     int count; 

     try { 

      URL url = new URL(aurl[0]); 
      URLConnection urlConnection = url.openConnection(); 
      urlConnection.setDoOutput(true); 
      urlConnection.connect(); 

      Log.i("1111", "1111"); 
      File SDCardRoot = Environment.getExternalStorageDirectory(); 
      File file = new File(SDCardRoot, "hello1.zip"); 
      Log.i("2222", "2222"); 
      FileOutputStream fileOutput = new FileOutputStream(file); 
      InputStream inputStream = urlConnection.getInputStream(); 
      int totalSize = urlConnection.getContentLength(); 
      int downloadedSize = 0; 
      byte[] buffer = new byte[1024]; 
      int bufferLength = 0; 
      Log.i("3333", "3333"); 
      Log.i("befferLength", "bufferLength: " + bufferLength); 
      Log.i("is read buffer", "is read buffer: " + inputStream.read(buffer)); 
      while ((bufferLength = inputStream.read(buffer)) > 0) { 
       Log.i("inside while", "inside while "); 
       fileOutput.write(buffer, 0, bufferLength); 
       downloadedSize += bufferLength; 
       updateProgress(downloadedSize, totalSize); 
      } 
      Log.i("4444", "4444"); 
      fileOutput.close(); 

     } catch (Exception e) { 
     } 
     return null; 


    } 

    protected void onProgressUpdate(String... progress) { 
     Log.d("ANDRO_ASYNC", progress[0]); 
     mProgressDialog.setProgress(Integer.parseInt(progress[0])); 
    } 

    @Override 
    protected void onPostExecute(String unused) { 
     dismissDialog(DIALOG_DOWNLOAD_PROGRESS); 
    } 
} 

public void updateProgress(int currentSize, int totalSize) { 
    Toast.makeText(getApplicationContext(), "Loading Files...", 
      Toast.LENGTH_SHORT).show(); 
} 

しかし、このファイルには、私の携帯電話では空である。この目的のために私は、この次のコードを使用しています。ここでは、コードの実行を見つけるためのさまざまなログステートメントがあります。私の驚きには、 "Log.i(" 2222 "、" 2222 ");残りのログは印刷されません。あなたは問題が何であるか教えてもらえますか?

ありがとうございます。

+0

「catch」にいくつかのログを追加し、例外が発生するかどうかを確認してください – Lino

答えて

0

Uは、この目的のためにDownloadManagerクラスを使用することができ、それは一時停止を処理し、ネットワークば可用性の場合にdowloadingを続け、あなたはdowloadingたときにあなたに(などの通知をプッシュするような)アクションを実行するために、ブロードキャストreciverを実行することができますが http://developer.android.com/reference/android/app/DownloadManager.html完了です

関連する問題