如何在小部件上将图像从url设置为imageview

时间:2015-01-21 13:51:32

标签: android android-widget android-volley

如何在小部件上将图像从url设置为imageview?

我认为最好的方法是使用volley lib:

    ImageLoader imageLoader = MyVolley.getImageLoader();

       imageLoader.get("http://www.shadyab.com/assests/images/upload/yuu1.jpg", new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {

                remoteViews.setImageViewBitmap(R.id.img_view_main_image_widgets,response.getBitmap());  
            }

            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }); 

但我的imageview将是白色的!


已更新:

我在另一个项目上测试了它并且工作正常(一个简单的imageview)。

    final ImageView two = (ImageView)findViewById(R.id.two);

    ImageLoader imageLoader = MyVolley.getImageLoader();

       imageLoader.get("http://www.shadyab.com/assests/images/upload/yuu1.jpg", new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {

                two.setImageBitmap(response.getBitmap());

            }

            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }); 

但我添加了一个日志,我收到了错误:

  

01-21 17:28:41.801:E /错误(2855):错误

       imageLoader.get("http://www.shadyab.com/assests/images/upload/yuu1.jpg", new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {

                remoteViews.setImageViewBitmap(R.id.img_view_main_image_widgets,response.getBitmap());
                if(response.getBitmap() == null){
                    Log.e("error", "error");
                }
            }

已更新:

我的所有代码:

http://pastebin.com/0wi4pX0N

我得到:

  

01-21 17:50:41.066:E / getBitmap(13554):getBitmap

       imageLoader.get("http://www.shadyab.com/assests/images/upload/yuu1.jpg", new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {


                if(response == null){
                    Log.e("response", "response");
                }else if (response.getBitmap() == null){
                    Log.e("getBitmap", "getBitmap");
                }else{
                    remoteViews.setImageViewBitmap(R.id.img_view_main_image_widgets,response.getBitmap());
                }
            }

2 个答案:

答案 0 :(得分:1)

确实,您的Bitmapnull。这是你的错误。

为什么null是另一个:您的网络电话只返回Bitmap,因此不会显示任何内容......

始终检查null s:

@Override
public void onResponse(ImageContainer response, boolean isImmediate) {
    if (response == null) {
        // FAILURE
        return ;
    }
    Bitmap bitmap = response.getBitmap();
    if (bitmap != null) {
        // SUCCESS
        // setImageBitmap(bitmap);
    }
    else {
        // FAILURE
        // display placeholder or whatever you want
    }
}

答案 1 :(得分:0)

试试这个:

URL url = new URL("http://www.shadyab.com/assests/images/upload/yuu1.jpg");
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bmp);