2013-12-21 68 views
2

我正在一個android項目>>>> 當我嘗試在android的doInBackground()方法中做任何代碼...它不會給出錯誤,但不會運行正確.... 這是我的代碼...我們可以把我們的編程doInBackground()在android

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> 
{ 
    protected Bitmap doInBackground(String... urls) 
    { 
     button.setVisibility(View.VISIBLE); 
     return DownloadImage(urls[0]); 
    } 
    protected void onPostExecute(Bitmap result) 
    { 

     ImageView img = (ImageView) findViewById(R.id.img); 
     img.setImageBitmap(result); 
    } 
} 

此代碼正常工作,當我刪除button.setVisibility(View.VISIBLE);

我的查詢,我們可以做這樣可見性關閉或節目的類型doInBackground()方法....

+2

你不能更新'UI'在'doInBackground' –

+1

此線button.setVisibility(View.VISIBLE);在onPostExecute(位圖結果)它可能會幫助你 – mayuri

+1

@Shayanpourvatan如果我們可以更新,而不是爲什麼它不運行... PLZ看到我的完整代碼http://pastie.org/8567194 –

回答

4

您必須在UI線程中設置可見性,否則它將無法工作。如果您在不同的線程中使用MessageHandler或可以使用runOnUiThread(使用可運行)來設置可見性。例如:

runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       // set visibility here 
      } 
}); 
+1

。這些真的有用答案..... Thanku。 –

1

你可以把此行button.setVisibility(View.VISIBLE);onPreExcute() mehod異步任務的

你可以不更新您的用戶界面doInBackground()How to use AsyncTask in android

1

由於此方法在單獨的(非UI)線程中執行,因此無法更新doInBackground()中的任何UI元素。

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> 
{ 

    protected void onPreExecute(){ 
     button.setVisibility(View.VISIBLE); 
    } 

    protected Bitmap doInBackground(String... urls) 
    { 
     return DownloadImage(urls[0]); 
    } 
    protected void onPostExecute(Bitmap result) 
    { 
     ImageView img = (ImageView) findViewById(R.id.img); 
     img.setImageBitmap(result); 
    } 
} 
+2

.. thanku..good答案....但我們可以在非gui方法中運行gui theread ...... + 1 –

2
在doInBackground

()方法,你不能做UI Realated操作使用onPreExecute()

如果您需要做的UI相關的操作使用onPreExcuteMethod()或onPostExcute()即

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> 
{ 

protected void onPreExcute(){ 
// Before starting the function. 
button.setVisibility(View.VISIBLE); 
} 
protected Bitmap doInBackground(String... urls) 
{ 

    return DownloadImage(urls[0]); 
} 
protected void onPostExecute(Bitmap result) 
{ 
// after completion of the function. 
//  button.setVisibility(View.VISIBLE); 

    ImageView img = (ImageView) findViewById(R.id.img); 
    img.setImageBitmap(result); 
} 

}

我認爲這會工作,或者你可以使用基於後EXCUTE方法你功能

+1

..thanku..good回答....但我們可以在非gui方法中運行gui theread ...... + 1 –

+0

是的,但是我們必須使用runonUIThread()方法來做到這一點,我不會在大多數情況下更喜歡這種方法。 –

1

要在doInBackground中使用UI,那麼您需要使用runOnUiThread。

runOnUiThread(new Runnable() { 
        public void run() { 
         // some code #3 (Write your code here to run in UI thread) 

        } 
       }); 

感謝

+1

。這些真的有幫助答案..... Thanku。 +1 –

相關問題