2011-08-24 54 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