2011-08-24 47 views
1

下面是我嘗試將圖像下載到Android應用程序內的活動。我的應用程序崩潰在行img1.setImageDrawable(d);我有一個LinearLayout裏面的RelativeLayout ..不知道爲什麼這會一直崩潰..我需要總共四個圖像下載到活動,我是否正確設置xml以獲得四個圖像或我需要對於個人ImageView的?任何建議/想法/提示,非常感謝。從Android中的線程下載圖像

 Thread t = new Thread(){ 
     @Override 
     public void run(){ 
      int i = imgarr.length; 
      int j = 0; 
      while(j<i){ 
       try { 
        InputStream is = (InputStream) new URL(imgarr[j]).getContent(); 
        Drawable d = Drawable.createFromStream(is,"pic"); 
        img1.setImageResource(d); 
        j++; 
       } catch (MalformedURLException e) {} 
        catch (IOException e) {} 
      } 
     }//end run 
    }; 
    t.start(); 


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:padding="10dip" 
android:layout_below="@id/adbody" 
> 
<ImageView android:id="@+id/image1" android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:paddingTop="15dip"/> 
</LinearLayout> 
+0

logcat關於崩潰的說法是什麼?什麼是錯誤? –

+0

這些文件是否已經存儲在本地?基本上,imgarr充滿了文件路徑? –

+0

@ B.Young imgarr充滿了IMG的網址... – Andrew

回答

3

你一定會喜歡AsyncTask

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

他們給的例子是,你想要什麼:如何下載文件。

+0

K,會給它一個鏡頭。我在應用程序的其他地方使用它..Lemme給了一個鏡頭......做一個編輯..我正在使用一個資源,而不是一個可繪製 – Andrew

+0

好吧,得到異步去...現在我只有一個圖像,當有多個圖像..我怎麼能使用一個XML圖像1作爲所有四個圖像的持有人,這可能嗎? – Andrew

+0

您可能需要以編程方式添加ImageViews – Cristian

1

如果你檢查你的Logcat,你會發現你正在嘗試在沒有創建它的線程內改變一個視圖。 您需要使用處理程序。 或者你可以使用有3種方法的AsyncTask。 一個用於下載之前發生了什麼(你的情況沒有)

一個用於下載

一個用於下載後會發生什麼(設置ImageView的)

注意「下載」部分沒有按不會在UI線程上運行,因此您不能在那裏更改圖像視圖。

在這裏閱讀:http://developer.android.com/resources/articles/painless-threading.html