从窗口小部件中的URL加载ImageView

时间:2015-01-02 13:36:33

标签: android bitmap imageview android-widget

我正在尝试制作一个ImageView的动态窗口小部件。我正在尝试使用AsyncTask从网址下载图片,然后尝试将新下载的位图应用到ImageView,但小部件中没有任何内容。

这是小部件中发生的Java代码:

public class MyWidget extends AppWidgetProvider
{

private static RemoteViews remoteViews;
private static String thumbnailUrl = "..."; // The image I'd like to show

// Async task for downloading an image and setting it to the ImageView
class DownloadImageTask extends AsyncTask<String, Void, Bitmap>
{
    @Override
    protected Bitmap doInBackground(String... urls)
    {
        String url = urls[0];
        Bitmap icon = null;
        try
        {
            InputStream in = new java.net.URL(urldisplay).openStream();
            icon = BitmapFactory.decodeStream(in);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return icon;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap)
    {
        if(bitmap == null)
        {
            System.out.println("Bitmap is null!");
            return;
        }
        remoteViews.setImageViewBitmap(R.id.thumbnailView, bitmap);
    }
}

@Override
public void onUpdate(Context context, AppWidgetManager manager, int[] widgetIds)
{
    if(remoteViews == null)
    {
        remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
    }

    new DownloadImageTask().execute(thumbnailUrl);
}

} // End of MyWidget

小部件确实有效,因为如果我在那里放置一个静态TextView,它就会显示出来。但是,ImageView没有。视图的ID正确,URL有效。调用onPostExecute()时,位图不为空。为什么位图不显示?

2 个答案:

答案 0 :(得分:1)

首先,将AsyncTask替换为IntentService。在您完成工作之前,您的流程很可能会被终止。让AppWidgetProvider代表加入IntentService

其次,使用更好的代码来下载图像比使用更好的代码,因为它不能很好地解决典型的移动问题,如偶发连接。有大量的图像加载库(毕加索,通用图像加载器等)在遇到问题时会更有弹性。

第三,你实际上必须对RemoteViews做点什么。现在,您拨打setImageViewBitmap() ...然后将RemoteViews放在地板上。您需要use AppWidgetManager告诉Android使用RemoteViews更新应用小部件。

而且,正如Ashish指出的那样,请记住IPC交易有1MB的限制,这将限制Bitmap的大小。许多图像加载库也内置了重采样逻辑,可以将图像缩放到合适的大小,因此您可以避免这种限制。

答案 1 :(得分:0)

检查你的logcat输出,你得到的东西是 -

  

错误/ JavaBinder(20204):!!!失败的粘合剂交易!!!

如果是,那么您正在达到文件大小限制:P