2012-12-20 47 views
1

在我的應用程序,系統會從網址下載圖片並保存到手機內存。 (我沒有包括在這個問題的URL地址)最重要的是,它也將數據保存到SQLite數據庫。保存的數據是文件名,文件路徑和文件大小。但是目前一旦我經歷了下載過程,無論下載完成還是在進程中失敗,它也會插入到數據庫中。
有沒有我可以檢查下載過程是否完成沒有什麼辦法?如何檢查下載鏡像的過程是否完成?

 GalleryScreen.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       boolean isDownloadResult = false; 


         int NumIncrease = 0; 
         Log.i(TAG, "NumberIncrease:" +NumIncrease); 
         Toast.makeText(getApplicationContext(), "Downloading.............>>>>>>>>>>>", Toast.LENGTH_SHORT).show(); 
         Bitmap bm; 
         InputStream in; 



         try{ 


          in = new java.net.URL(URL).openStream(); 
          bm = BitmapFactory.decodeStream(new PatchInputStream(in)); 

          File storage = new File(Environment.getExternalStorageDirectory() + File.separator + "/Images/"); 
          Log.i(TAG,"storage:" +storage); 
          Log.i(TAG,"storage:" +storage.getAbsolutePath()); 
          if(!storage.exists()){ 
           storage.mkdirs(); 


          } 

           String FileName = "/"+CONTENT_ID+".jpg"; 
           FileOutputStream fos = new FileOutputStream(storage + FileName); 
           bm.compress(Bitmap.CompressFormat.JPEG, 85, fos); 

           String filepath = storage + FileName; 
           File filecheck = new File (filepath); 
           long fileSize = filecheck.length(); 
           fos.flush(); 
           fos.close(); 

           Log.i(TAG, "bm:" +bm); 
           Log.i(TAG, "fos:" +fos); 
           Log.i(TAG, "filesize:" +fileSize); 
           Log.i(TAG, "filepath:" +filepath); 
           helper.insert_content(filepath, fileSize, requestTime); 


          isDownload = false; 
         } 
         catch(IOException e1){ 
           e1.printStackTrace(); 
           } 
      } 

     }); 
+0

如果你使用的AsyncTask那麼你可以檢查它是否正在運行或不 – rajpara

回答

4

請使用AsyncTask。 AsyncTask支持正確和簡單地使用UI線程。該類允許執行後臺操作並在UI線程上發佈結果,而無需操縱線程和/或處理程序。

的AsyncTask的設計是圍繞線程和處理程序一個輔助類,並不構成通用線程框架。 AsyncTasks應該理想地(在幾秒鐘之最。)可用於短期操作

你可以使用匿名類異步任務。這將是這樣的:

ImageView mChart = (ImageView) findViewById(R.id.imageview); 
String URL = "http://www...anything ..."; 

mChart.setTag(URL); 
new DownloadImageTask.execute(mChart); 

任務等級:

public class DownloadImagesTask extends AsyncTask<ImageView, Void, Bitmap> { 

ImageView imageView = null; 

@Override 
protected Bitmap doInBackground(ImageView... imageViews) { 
    this.imageView = imageViews[0]; 
    return download_Image((String)imageView.getTag()); 
} 

@Override 
protected void onPostExecute(Bitmap result) { 
    imageView.setImageBitmap(result); 
} 


private Bitmap download_Image(String url) { 
    ... 
} 

這裏,onPostExecute,您可以輕鬆地查詢下載圖像的過程是否完成與否。

進一步閱讀

編輯:

+0

感謝您的信息。我會試着看看AsyncTask。正如你所提到的_AsyncTasks理想情況下應該用於短操作(最多幾秒鐘)。現在我想下載圖片,所以我想這應該沒問題。但如果稍後我想從url實現下載視頻功能。 AsyncTask是否適合該任務? –

+0

@IssacZH。最受歡迎,因爲它幫助你。 :)我已經編輯我的答案作爲您的評論。請看看編輯部分。 –

+0

再次感謝您!現在我知道如何在這方面取得進展。你的回答非常有幫助。 –

相關問題