gpt4 book ai didi

android - 使用来自互联网的图像更新 android 小部件(使用异步任务)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:35:02 25 4
gpt4 key购买 nike

我有一个简单的 android 小部件,我想用来自 Internet 的图像对其进行更新。我可以在小部件上显示静态图像没问题。有人告诉我,您需要为此使用异步任务,而我对此经验不多。

这是我的小部件:

    @Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {

super.onUpdate(context, appWidgetManager, appWidgetIds);

for (int i = 0; i < appWidgetIds.length; i++){
int appWidgetId = appWidgetIds[i];

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.activity_main);

//Setup a static image, this works fine.
views.setImageViewResource(R.id.imageView1, R.drawable.wordpress_icon);

new DownloadBitmap().execute("MyTestString");

appWidgetManager.updateAppWidget(appWidgetId, views);
}

然后我有一个执行下载的异步任务类。它看起来像这样:

public class DownloadBitmap extends AsyncTask<String, Void, Bitmap> {

/** The url from where to download the image. */
private String url = "http://0.tqn.com/d/webclipart/1/0/5/l/4/floral-icon-5.jpg";

@Override
protected Bitmap doInBackground(String... params) {
try {
InputStream in = new java.net.URL(url).openStream();
Bitmap bitmap = BitmapFactory.decodeStream(in);
return bitmap;
//NOTE: it is not thread-safe to set the ImageView from inside this method. It must be done in onPostExecute()
} catch (Exception e) {
Log.e("ImageDownload", "Download failed: " + e.getMessage());
}
return null;
}


@Override
protected void onPostExecute(Bitmap bitmap) {
if (isCancelled()) {
bitmap = null;
}

//Here is where I should set the image to the imageview, but how?
}
}

我认为我的代码已成功从 Internet 下载图像。

让我感到困惑的是,如何将此图像从我的异步任务类中获取到特定小部件的“ImageView”中。要更新图像,您需要访问 3 个不同的对象:Context、AppWidgetManager 和 AppWidgetId...。但是我如何在该语句中传递所有这些对象:???

new DownloadBitmap().execute("MyTestString");

谢谢!

最佳答案

一个解决方案是将 RemoteViews 作为参数传递给 DownloadBitmap 构造函数,并在 onPostExecute() 中设置图像:

在 onUpdate() 中:

new DownloadBitmap(views).execute("MyTestString");

在 DownloadBitmap 中:

//....
public class DownloadBitmap extends AsyncTask<String, Void, Bitmap> {
private RemoteViews views;

public DownloadBitmap(RemoteViews views){
this.views = views;
}

//.....
public void onPostExecute(Bitmap bitmap){
views.setImageViewBitmap(R.id.imageView1, bitmap);
}
}

关于android - 使用来自互联网的图像更新 android 小部件(使用异步任务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17380168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com