2013-06-27 63 views
0
public class get extends AsyncTask<String,Void,Void> 
{ 

    @Override 
    protected Void doInBackground(String... params) { 
     // TODO Auto-generated method stub 



     try { 
      URL url = new URL("http://c69282.r82.cf3.rackcdn.com/IMG_0755-Edit-4.jpg") ; 
      URLConnection connect = url.openConnection(); 
      InputStream in = new BufferedInputStream(connect.getInputStream()); 
      Bitmap img = BitmapFactory.decodeStream(in); 
      image.setImageBitmap(img); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     return null; 
    } 


} 

這是我的AsyncTask,當我嘗試在主線程中運行此應用程序時,該應用程序崩潰。在主線上運行AsyncTask時出錯

,如果我在

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build(); 
     StrictMode.setThreadPolicy(policy); 

鍵入然而它正常工作,創造了AsyncTask整點是爲了擺脫使用該代碼的需要。

更新:我將image.setImageBitmap(img)放在post執行並且它工作。多謝你們!

+2

LogCat在崩潰時說什麼? –

+0

查看我的更新回答 –

回答

3

您無法從doInbackground()更新ui。在後臺線程上調用doInbackground。 Ui應該在ui線程上更新。在ui線程上調用onPostExecute。計算結果doInbackgroundonPostExecute的參數。所以返回結果doInbackground並更新UIi onPostExecute

http://developer.android.com/reference/android/os/AsyncTask.html

下部在上述鏈路的4個步驟的檢查主題。

 image.setImageBitmap(img); 

你應該onPostExecute UI更新或使用runOnUiThread

但我建議你在onPostExecute更新ui。

 runOnUiThread(new Runnable() //run on ui thread 
    { 
      public void run() 
      { 
      // update ui  
      } 
    }); 
+0

謝謝我會試試看。 – user2519193

+0

它的工作,非常感謝你! – user2519193

1

我認爲你在做doInBackground()方法中的UI操作。

image.setImageBitmap(img); 

您應該在onPostExecute()方法中執行此操作。

您應該只在doInBackground()方法中執行非UI操作。

0

您無法更新您的用戶界面doInBackground(),您只需在onPostExecute()中更新您的用戶界面。 因此,使用下面的代碼來更新圖像。

public class get extends AsyncTask<String,Void,Void> 
{ 
Bitmap img; 
    @Override 
    protected Void doInBackground(String... params) { 
     // TODO Auto-generated method stub 


     try { 
      URL url = new URL("http://c69282.r82.cf3.rackcdn.com/IMG_0755-Edit-4.jpg") ; 
      URLConnection connect = url.openConnection(); 
      InputStream in = new BufferedInputStream(connect.getInputStream()); 
      img = BitmapFactory.decodeStream(in); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     return null; 
    } 

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


} 

在這裏你也提到任何關於變量image。您應該在onPostExecute()中填充Imageview,然後添加用於設置圖像位圖的行。

相關問題