2011-04-04 59 views
4

我一直在開發應用程序,我得到了兩個活動。
第一個Activity調用Second獲取下載url。進度對話框不顯示onActivityResult功能

OnActivityResult功能的第一Activity.there有一個ProgressDialog 顯示使用該網址下載圖像的狀態。

問題是在該活動中未顯示進度對話框。

protected void onActivityResult(int requestCode, int resultCode, Intent imagePicked) 
    {  
     super.onActivityResult(requestCode, resultCode, imagePicked); 
      if(resultCode==RESULT_OK) 
      { 

       ProgressDialog progressDialog=ProgressDialog.show(this, "", "Loading Image"); 
       switch(requestCode) 
       { 
        case CharacterSelector.GetFaceBookImage: 
         //Toast.makeText(this, "onFacebookimageresult", Toast.LENGTH_SHORT).show(); 
         String ImageUrl=imagePicked.getStringExtra("DownloadLink"); 
         WebService getImage=new WebService(ImageUrl); 

         Log.d("Selected Img url", ""+ImageUrl); 
         InputStream inputStream; 
         try 
         { 
          inputStream = getImage.getHttpStream(ImageUrl); 
          getImage=null; 
          Bitmap bitmap=BitmapFactory.decodeStream(inputStream); 
          inputStream=null; 
          mybitmapDrawable=new BitmapDrawable(bitmap); 
          addImageUserImage(mybitmapDrawable.mutate()); 
          progressDialog.dismiss(); 
          bitmap=null; 
         } 
         catch (IOException e) 
         { 
          //Show server Error message: 
          e.printStackTrace(); 
         } 

         break; 

問候, Kariyachan

回答

4

您不應該在主線程上執行長時間運行的任務(即通過網絡獲取圖像),因爲這會阻止UI重繪。

使用AsyncTask在後臺執行長時間運行的任務,同時更新UI。

+0

是啊!整個屏幕空白一段時間然後它顯示下載的圖像。 Iam使用AsyncTask進行操作。感謝您的時間:)。 – DroidBot 2011-04-04 09:37:23

+0

謝謝你!這是完美的。 – DroidBot 2011-04-04 11:12:46

0

啓動一個新線程

verlauf = ProgressDialog.show(ctx, "Infrarotauslesung", "initialisiere Bluetooth",true,false); 
    new Thread(){ 
     @Override 
     public void run(){ 
         Looper.prepare(); 
     }.start(); 
0

我認爲ProgressDialog已經帶出一個很短的時間。您應在開始Activity之前顯示它,請求代碼爲CharacterSelector.GetFaceBookImage

2

如果您的WebService類異步下載,那麼會在放映後立即調用解除,因此您的進度對話框將同時出現並消失。

如果您的Webservice類同步下載,那麼它可能會導致ANR,並且您的活動可能會被系統終止。您必須在另一個線程內使用AsyncTask(例如