2016-10-02 4 views
0

誰かがAsyncTaskを@Backgroundと@UiThreadに変更するのに少し助けてくれますか? どうすればいいですか?何を削除すればよいですか? onPostとonPreはUiThreadに変換する必要がありますか? 私はアドバイスに非常に感謝しますAsyncTaskを@backgroundと@UiThreadに変更する方法

ここに私のコードの一部です。

@Click 
    void button1(View view) 
    { 

     ReadPic rp = new ReadPic(); 
     rp.execute(); 
    } 

    class ReadPic extends AsyncTask<Void, Void, Void> 
    { 
     ProgressBar progressBar; 
     boolean sukces = true; 

     public ReadPic() 
     { 
      progressBar = new ProgressBar(getBaseContext()); 

     } 

     @Override 
     protected Void doInBackground(Void... arg0) 
     { 
      URL u; 
      InputStream is; 

      try 
      { 
       u = new URL(adres); 
       is = u.openStream(); 
       Bitmap temp = BitmapFactory.decodeStream(is); 
       bmp=temp.copy(Bitmap.Config.ARGB_8888, true); 
      } 
      catch(Exception e) 
      { 
       sukces = false; 

      } 
      return null; 
     } 
     @Override 
     protected void onPreExecute() 
     { 
      if(progressBar !=null) 
       progressBar.setVisibility(ProgressBar.VISIBLE); 


      button1.setEnabled(false); 
      if(progressBar !=null) 
       progressBar.setVisibility(ProgressBar.INVISIBLE); 
      textView1.setText("DOWNLOADING..."); 
      super.onPreExecute(); 
     } 
     @Override 
     protected void onPostExecute(Void result) 
     { 
      if(sukces) 
      { 


       imageView.setImageBitmap(bmp); 
       imageView1.setImageBitmap(bmp); 
       imageView2.setImageBitmap(bmp); 
       imageView3.setImageBitmap(bmp); 
       imageView4.setImageBitmap(bmp); 
       imageView5.setImageBitmap(bmp); 
       imageView6.setImageBitmap(bmp); 
       imageView7.setImageBitmap(bmp); 
       imageView8.setImageBitmap(bmp); 

       textView1.setText("Downloading finished"); 
      } 
      else 
      { 
       textView1.setText("Error when downloading"); 
      } 
      button1.setEnabled(true); 
      progressBar.setVisibility(ProgressBar.INVISIBLE); 
      super.onPostExecute(result); 
     } 

答えて

0

あなたはこのようにそれを変換することができます:

@Click 
void button1(View view) { 
    startProcess(); 
} 

void startProcess() { 
    if(progressBar !=null) // progressBar should be a field in your Activity/Fragment 
     progressBar.setVisibility(ProgressBar.VISIBLE); 


    button1.setEnabled(false); 
    if(progressBar !=null) 
     progressBar.setVisibility(ProgressBar.INVISIBLE); 
    textView1.setText("DOWNLOADING..."); 

    yourBackgroundMethod(); 
} 

@Background 
void yourBackgroundMethod() { 
    URL u; 
    InputStream is; 

    try 
    { 
     u = new URL(adres); 
     is = u.openStream(); 
     Bitmap temp = BitmapFactory.decodeStream(is); 
     bmp=temp.copy(Bitmap.Config.ARGB_8888, true); 

     onBackgroundSuccess(); 
     onBackgroundTerminate(); 
    } 
    catch(Exception e) 
    { 
     onBackgroundError(); 
     onBackgroundTerminate(); 
    } 
} 

@UiThread 
void onBackgroundError() { 
    imageView.setImageBitmap(bmp); 
    imageView1.setImageBitmap(bmp); 
    imageView2.setImageBitmap(bmp); 
    imageView3.setImageBitmap(bmp); 
    imageView4.setImageBitmap(bmp); 
    imageView5.setImageBitmap(bmp); 
    imageView6.setImageBitmap(bmp); 
    imageView7.setImageBitmap(bmp); 
    imageView8.setImageBitmap(bmp); 

    textView1.setText("Downloading finished"); 
} 

@UiThread 
void onBackgroundSuccess() { 
    textView1.setText("Error when downloading"); 
} 

@UiThread 
void onBackgroundTerminate() { 
    button1.setEnabled(true); 
    progressBar.setVisibility(ProgressBar.INVISIBLE); 
} 
+0

どうもありがとう、正常に動作しますが、あなたはミスを犯したonBackgroundError onBackgroundSuccessがある場所にする必要があります。とにかく、もう一度ありがとう:-) – Gorthez

+0

あなたは正しいです、私はコピー貼り付けエラーを起こしました。 :) – WonderCsabo

関連する問題