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

2024-02-10

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

这是我的小部件:

    @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?
    } 
}

我认为我的代码已成功从互联网下载图像。

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

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

Thanks!


一种解决方案是通过RemoteViews作为一个论据DownloadBitmap构造函数,并在onPostExecute()设置图像:

在 onUpdate() 中:

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

在下载位图中:

//....
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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用来自互联网的图像更新 Android 小部件(使用异步任务) 的相关文章

随机推荐

  • Chrome 扩展程序桌面通知可在睡眠状态下运行

    我制作了一个桌面通知 它每 1 分钟显示一次通知 10 秒后 自动关闭 我去吃午饭 然后电脑就进入睡眠状态 当我回来时 我唤醒了我的电脑 然后开始出现很多通知 我该如何处理这个问题 我希望如果计算机睡眠 它不应该显示通知 我怎样才能控制它
  • Angular2 RC5 入门与 ng-bootstrap 404 错误

    我已按照 ng bootstrap 网站上的说明使用 Angular2 的新 git 克隆进行安装 但当 NgbModule 位于导入数组中时收到 404 错误 NgModule 错误的屏幕截图 404 加载 ng bootstrap 时出
  • Vim 视觉选择和正则表达式

    我在视觉选择和运行正则表达式替换方面遇到问题 当我选择一些不包含整行的文本 然后点击 来调出命令行 然后执行类似的操作 s T t 然后该行的第一个匹配项 无论是否被选择 被更改 例如 我有文字 Test Text here 我视觉上选择了
  • 8 位、16 位、32 位处理器/微控制器中整数的大小是多少?

    8 位 16 位 32 位处理器 微控制器中整数的大小是多少 我想这取决于内部累加器 寄存器的大小 但不确定 谢谢 我只知道一种编程语言定义了integer数据类型 但很少用于 8 位和 16 位体系结构 C 是最广泛使用的 8 位 16
  • PHP 全局命名空间函数

    在 PHP 中 我可以使用以下命令从另一个命名空间访问全局命名空间中的函数myFunc 代替 myFunc PHP 将自动回退到全局命名空间 如果myFunc无法在当前命名空间中解析 推荐的方式是哪种 myFunc or myFunc 如果
  • Scala 中通用过滤器函数中的错误

    我正在 Scala 中编写一个过滤器函数 虽然我对自己正在尝试做的事情感觉很好 但我无法弄清楚为什么它不会识别我的列表或这个错误告诉我什么 我尝试过编辑语法 但似乎没有任何办法可以解决它 sealed trait List A case o
  • 在支持超线程的四核 CPU 上运行的单 CPU 程序

    我是统计模式识别领域的研究员 我经常进行持续很多天的模拟 我正在运行 Ubuntu 12 04 和 Linux 3 2 0 24 generic 据我所知 它支持多核和超线程 使用带有 HTT 的 Intel Core i7 Sandy B
  • azure 中何时创建了块 blob?

    blob 引用包含一个Properties财产有一个LastModified of DateTimeOffset 但是 我找不到 blob 的创建日期 时间 是否有我可以使用的标准 API 或者我需要将其存储在元数据中 public asy
  • 我可以使用Boost消息队列进行线程通信吗

    我正在从主线程生成多个工作线程 我可以从主线程为每个线程创建 message queue 并从主线程发送消息吗 我问这个是因为消息队列是用于进程间通信的吗 我需要考虑与此相关的任何具体事项吗 正如所提到的Boost Message Queu
  • 当分母中的元素可能为零时,有效的逐元素矩阵除法

    我正在使用 numpy 使用 Python 2 7 6 进行编程 我在两个 numpy 矩阵之间进行了划分V np dot W H 有时 分母的某些单元格值等于 0 因此我会收到运行时错误 我想以有效的方式实施安全划分 我如何编写执行矩阵除
  • 为左浮动 div 或列表设置文本溢出省略号

    这是我想做的 创建一个仅占用所需空间 水平 的列表 即最长的列表元素 当列表不适合页面时 修剪列表文本并显示省略号 我使用的组合white space nowrap and text overflow ellipsis 对于普通列表来说它工
  • 在ios中使用AVAudioSession时出错

    我用了这些代码 void viewDidLoad AVAudioSession sharedInstance setDelegate self AVAudioSession sharedInstance setCategory AVAudi
  • 如何以八度增加命令窗口的字体大小

    我试图弄清楚如何增加命令窗口文本 我想通了legend legend fontsize 10 Low fontsize 10 Medium fontsize 10 High 我尝试做同样的事情 但是command command windo
  • 谷歌地图无法正确呈现

    我正在使用主干和 gmaps js 由于某种原因 地图无法正确渲染 控制器没有正确显示 信息窗口的渲染也很奇怪 我正在使用gmaps js 库 https github com HPNeo gmaps 我什至不知道如何调试这个东西 这是我的
  • 计数信号量和二进制信号量之间的区别

    计数和二进制信号量有什么区别 我在某处看到的是 两者都可以控制 N 个请求资源的进程 两者都拥有自由邦 二进制信号量和计数信号量可以保护的资源数量是否有限制 两者都只允许一个进程一次使用一种资源 还有其他区别吗 上述属性是否正确 实际上 这
  • python语法错误无效语法[重复]

    这个问题在这里已经有答案了 我是 Python 编程语言的新手 我买了一本书并且一直在读 这本书的名字是 3x Python 初学者编程第三版 我正在努力将迄今为止所学到的知识付诸实践 我有一个我不明白的问题 我知道它很简单 但我不确定如何
  • 如何在 SQLAlchemy for MSSQL 中设置架构?

    我目前这样做 usr bin env python 3rd party modules from sqlalchemy import create engine requires pymssql local modules from con
  • 如何尽可能快地将大量记录插入MySql数据库

    我有一个如下所示的数据库表 create table temperature id int unsigned not null auto increment primary key temperature double 在我的程序中 我将大
  • 从 Xamarin.Forms 应用程序打印

    我是 Xamarin 新手 目前正在使用 Xamarin Forms 开发示例或 概念证明 应用程序 我应该从这个应用程序执行打印任务 尽管我现在还不确定要打印什么 屏幕 标签内容 文件等 无论哪种方式 从 Xamarin Forms 应用
  • 使用来自互联网的图像更新 Android 小部件(使用异步任务)

    我有一个简单的 Android 小部件 我想用互联网上的图像进行更新 我可以在小部件上显示静态图像 没有问题 有人告诉我 您需要为此使用异步任务 而我对此没有太多经验 这是我的小部件 Override public void onUpdat