ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-使用URL中的图像更新ImageView

2019-10-10 03:34:26  阅读:12  来源: 互联网

标签:android java



在我的android应用程序中,我想使用从URL指定的图像更新ImageView.此URL已作为AsyncTask的一部分通过API提取.

我定义了ImageView如下:

<ImageView
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"
    android:layout_height="wrap_content" 
    android:id="@+id/product_image"
    android:src="@drawable/no_product_image" 
    android:layout_marginRight="6dip"
    android:layout_width="wrap_content"
    />

这样,在加载数据的同时,ProgressDialog后面有空白图像.

在获取产品详细信息之后,作为AsyncTask的doInBackground的一部分,我致电:

private void createProductScreen(Product product){
        Log.i(TAG, "Updating product screen");

        //Set the product image
        ImageView imgView =(ImageView)findViewById(R.id.product_image);
        Drawable drawable = loadImageFromWeb(product.getImageUrl());
        imgView.setImageDrawable(drawable);
        Log.i(TAG, "Set image");
}

该图像是从Web加载的,如下所示:

private Drawable loadImageFromWeb(String url){
        Log.i(TAG, "Fetching image");
        try{
            InputStream is = (InputStream) new URL(url).getContent();
            Drawable d = Drawable.createFromStream(is, "src");
            Log.i(TAG, "Created image from stream");
            return d;
        }catch (Exception e) {
            //TODO handle error
            Log.i(TAG, "Error fetching image");
            System.out.println("Exc="+e);
            return null;
        }
    }

当它运行时,我在日志中看到“从流创建的图像”,但是没有看到“设置图像”,并且从不调用AsyncTask的onPostExecute.

是否有人对此问题有任何想法,或者有将图像从空白图像更新为产品图像的更好方法?

解决方法:

因为尝试将ImageView设置在单独的线程中,所以应该获得Exception.
imgView.setImageDrawable(绘制);必须在同一UI线程中调用.
由于您使用的是AsyncTask类,因此设置imageview对象的正确位置是onPostExecute方法内部.
更改逻辑,使doInBackground将Drawable对象返回到onPostExecute方法,然后使用它调用imgView.setImageDrawable(drawable);



标签:android,java

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有