无法从 AppWidgetProvider 类中的线程进行祝酒

2024-01-01

我有一个应用程序小部件,可以从网络服务下载一些数据(在线程中)onReceive())通过点击它。完成后,小部件的 GUI 将更新为updateWidget(...)(=重新绘制)。

完成后我想干杯。我尝试了很多,比如在最后祝酒updateWidget(...)通过将上下文从线程传递到 toast,但这不起作用。问题似乎出在上下文上。因为我的类继承自AppWidgetProvider而不是来自 Activity 我不能使用类似的东西getApplicationContext()。我想我只需要为吐司获取正确的上下文,但我不知道该怎么做。

这是相关代码:

@Override
public void onReceive(Context context, Intent intent)
{
    //  Name of the action of the intent
    final String action = intent.getAction();

    //  This way the context and the intent can be used in the thread
    final Context ctx = context;
    final Intent i = intent;

    if (action.equals(COUNT_DOWN) == true || action.equals(COUNT_UP) == true)
    {
        //  Show toast to inform the user that this feature is only available in the full version
        Toast.makeText(context, R.string.no_groupchange, Toast.LENGTH_SHORT).show();
    }

    // Update current group
    else if (action.equals(UPDATE_WIDGET))
    {
        // Check for internet connection
        if (isOnline(context) == true)
        {
            //  Show toast to inform the user that refreshing the data has started
            Toast.makeText(context, R.string.refreshing, Toast.LENGTH_SHORT).show();

            //  This way the complete internet communication is independent from the GUI
            //  Also works at low speed internet connection
            Thread myThread = new Thread(new Runnable()
            {
                @Override
                public void run()
                {
                    // TODO Auto-generated method stub
                    int currentGroupOrderID = soapManager.getCurrentGroupOrderID(LEAGUE_SC);
                    theGroup = soapManager.getGroup(currentGroupOrderID, LEAGUE_SC, SAISON);
                    nextMatch = soapManager.getNextMatch(LEAGUE_SC);

                    updateWidget(ctx, i);                       
                }
            });

            myThread.start();               
        } 
        else
        {
            Toast.makeText(context, R.string.no_internet, Toast.LENGTH_SHORT).show();
        }
    }

    super.onReceive(context, intent);
}

public void updateWidget(Context context, Intent intent)
{           
    //  Creating remoteViews for updating the widget
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout_simple);

    //  Fill the textViews with text
    setTextViewsFromTheGroup(remoteViews);
    setNextMatchTextView(remoteViews);

    //  Update the widget
    ComponentName widget = new ComponentName(context, SoccerWidgetProvider.class);
    AppWidgetManager awm = AppWidgetManager.getInstance(context);
    awm.updateAppWidget(widget, remoteViews);

    //  This way the widget doesn't stop reacting after some time
    final int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);

    if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID)
    {
        attachIntents(context, remoteViews, appWidgetId);
    }

    //  HERE I WANT TO MAKE A TOAST!!!
}

你需要打电话Toast.makeText来自 UI 线程。您可以通过执行以下操作来做到这一点:

runOnUiThread(new Runnable() {
    public void run()
    {
        Toast.makeText(context, R.string.refreshing, Toast.LENGTH_SHORT).show();
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法从 AppWidgetProvider 类中的线程进行祝酒 的相关文章

  • 使用新语法应用 Android Gradle 插件

    如何使用新的 Gradle 插件语法应用 Android 插件 plugins id version 代替 buildscript dependencies classpath com android tools build gradle
  • 适用于 IOS 和 Android 的支付网关 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个应用程序 用户必须在澳大利亚餐馆通过应用程序 android ios 付款 有两种付款方式 通过 PayPal 或 Visa
  • 我在哪里可以获得可靠的熵来源(真正的随机性字节[])?

    目前 我正在寻找一种方法来增加随机性的质量 in my Android应用程序 纸牌游戏 之前 估计对于我的情况 52 排列 至少需要 226 位熵 226 个随机位 我打算用这个byte 作为种子SecureRandom SecureRa
  • 需要使用手机后退按钮返回 Web 视图的帮助

    这是我的代码 package com testappmobile import android app Activity import android os Bundle import android view KeyEvent impor
  • API29 上不推荐使用 setColorFilter

    我使用以下行来更改 VectorDrawable 的颜色 mydrawable getBackground setColorFilter color PorterDuff Mode SRC ATOP 这很好用 尽管它现在已被弃用 文档建议我
  • 如何在活动中的必填字段中显示 * 符号

    我需要在活动中的必填字段中显示 符号 你能建议我怎样才能做到这一点吗 任何帮助 将不胜感激 我想说 作为必填字段的标记不遵循本机 Android 主题 的组合setHint and setError对于 Android 应用程序来说看起来更
  • Android:如何使用后台线程?

    我开发了一个应用程序 它从互联网获取内容并相应地在设备的屏幕上显示它 该程序运行得很好 就是有点慢 加载并显示内容大约需要 3 4 秒 我想将获取内容并将其显示在后台线程中的所有代码放在一起 当程序执行这些功能时 我想显示一个进度对话框 你
  • 当不支持 Google Play 应用内结算 V.3 时

    在 Google Play 的应用内结算 V 3 中 有一个选项可以检查用户设备是否支持它 使用是否支持计费 http developer android com google play billing versions html meth
  • 如何向开发人员发送崩溃报告?

    我开发 Android 应用程序 但在某些情况下我的应用程序force close 如果出现以下情况 我如何向开发人员发送包含详细信息的电子邮件force close随时发生 The ACRA https github com ACRA a
  • 使用 Android Firebase 堆栈推送通知

    我开发了使用 Firebase 接收推送通知的 Android 应用程序 我的代码基于 Firebase Google 官方文档 https firebase google com docs cloud messaging android
  • Android Fragment onCreateView 与手势

    我正在尝试在片段中使用手势 我在 FragmentActivity 中有以下内容来处理我的详细信息片段 我试图发生的情况是 当在视图上检测到滑动时 将该视图内的数据替换为上一个或下一个条目 如果有更好的方法来处理这个问题 我完全同意 然而
  • Android:使 Dialog 周围的所有内容都比默认值更暗

    我有一个具有以下样式的自定义对话框 它显示了一个无边框对话框 后面的任何内容都会 稍微 变暗 我的设计师希望背后的一切都比 Android 的默认设置更暗 但不是完全黑色 有这样的设置吗 我能想到的唯一解决方法是使用全屏活动而不是对话框 只
  • Emma 不生成coverage.ec

    我设置了艾玛 它曾经对我有用 然后我们更改了源代码 现在它没有生成coverage ec根本不 它确实生成coverage em 测试临近结束时 出现错误消息 exec INSTRUMENTATION CODE 0 echo Downloa
  • Android 中的列表视图分页

    我有一个列表视图 其中显示了 50 个元素 我决定对视图进行分页 以便视图的每个部分都有 10 个元素 然后单击 下一个 按钮以获取下一个 10 个元素 如何设置10个数据 我关注这篇文章http rakhi577 wordpress co
  • Glass 语音命令给定列表中最接近的匹配项

    使用 Glass 您可以通过 确定 Glass 菜单启动应用程序 它似乎会选择最接近的匹配项 除非命令相距数英里 并且您可以明显看到命令列表 无论如何 是否可以从应用程序内或从语音提示 在初始应用程序触发后 给出类似的列表并返回最接近的匹配
  • 如何构建自定义摄像机应用程序?

    我正在尝试开发一个自定义摄像机录像机 当我的设备在 Activity 的 beginRecording 中执行 start MediaRecorder 方法时 应用程序崩溃 我不知道出了什么问题 因为我遵循谷歌API指南 http deve
  • Android Root 执行 su 带参数

    我在使用参数执行 su 时遇到问题 包含空格 我的 Command java 看起来像这样 public class Command Process process public String executeCommand String c
  • 在android中创建SQLite数据库

    我想在我的应用程序中创建一个 SQLite 数据库 其中包含三个表 我将向表中添加数据并稍后使用它们 但我喜欢保留数据库 就好像第一次安装应用程序时它会检查数据库是否存在 如果存在则更新它 否则如果不存在则创建一个新数据库 此外 我正在制作
  • Android AdMob:addView 在返回活动之前不会显示广告

    我正在尝试在游戏顶部添加横幅广告 我的活动使用带有自定义 SurfaceView 的relativelayout 我希望广告与 SurfaceView 重叠 广告会加载并可点击 但不会绘制到屏幕上 当我离开活动并返回时 会绘制广告 例如 通
  • Flash 对象未显示在phonegap android 中

    我已经在 android 手机间隙创建了一个应用程序 我有一个屏幕 我想显示一个静态 flash obj 所以我在屏幕 HTML 页面中放入了以下代码

随机推荐

  • 如何在 Eclipse 中为编辑器创建大纲视图?

    我在 eclipse 中创建了一个自定义编辑器 其大纲视图显示大纲不可用 我尝试搜索此内容 发现了以下链接 常见问题解答 如何为我自己的语言编辑器创建大纲视图 http wiki eclipse org FAQ How do I creat
  • 在 Ruby 中生成高斯(正态分布)随机数的代码

    在 ruby 中生成正态分布随机数的代码是什么 注 我回答了我自己的问题 但我会等几天再接受 看看是否有人有更好的答案 EDIT 为了搜索这个 我查看了两次搜索产生的 SO 上的所有页面 正态分布 红宝石 and 高斯 随机红宝石 蟒蛇的随
  • 使用 [NSDate date] 获取当前日期和时间

    我的系统的日期时间是 5 月 26 日 22 55 但是当我与 NSDate date 日期时间是 5 月 27 日 02 35 是因为时区的原因吗 如果是 如何解决这个问题 当我得到日期时间时 给我系统的日期并且不检查时区 NSLocal
  • yii:尝试获取非对象的属性

    嗯 我发现this https stackoverflow com questions 18335513 trying to get property of non object error in yii 但我看不到与我的错误的关系 我是新
  • Python - 从其他内部类引用内部类

    我试图从另一个内部类引用一个内部类 我都尝试过 class Foo object class A object pass class B object other A and class Foo object class A object
  • SVG - 单击不是函数[重复]

    这个问题在这里已经有答案了 我有一个这样的元素
  • AJAX更新数据库

    抱歉没有说出我的问题 实际上我想更新数据库中的数据 但现在的问题是 即使我尝试选择批准或拒绝ajax仍然不会更新 我是 ajax 新手 尝试在网络上搜索 但我的代码仍然有问题 这是我的 php 页面
  • HTML 报纸专栏

    我正在尝试使用文本块创建报纸样式的专栏 我希望文本均匀分布在两列中 这样可以对文本长度的变化做出反应 仅使用 HTML CSS 可以吗 如果不行 可以使用 javascript 吗 Thanks 两个注意事项 适用于印刷媒体的内容不适用于显
  • 数学表达式的自定义解释器

    我必须评估大量包含变量的表达式 并且我正在考虑编写一个小型自定义解释器以保持编译快速且小型 但是我对这个主题没有经验 并且有一些问题 假设我们有一个包含数学表达式和一组有限对象的文件 该文件可能如下所示 expr x y z 2 x y x
  • Flask 应用程序部署到 Heroku 时出错 at=错误代码=H10 desc="应用程序崩溃" method=GET path="/"

    在 Heroku 中部署时 示例 Flask 应用程序在 error code H10 desc App crashed method GET path 处给出错误 Flaskapp py from flask import Flask a
  • Dataframe聚合方法传递列表问题

    这可能是一个错误 但是您对此 pandas 功能有何看法 df pd DataFrame np arange 20 reshape 10 1 columns AB def f x print type x df agg f Output
  • 用于处理动态分类法的专用多面搜索引擎 - 仅有助于性能还是灵活性?

    一段时间以来 我一直在考虑如何使用类似于 eBay 的分类法和依赖于特定产品类别的属性来对典型的电子商务网站进行建模 第一次尝试是在 EAV 和 Table Per Class 数据库继承建模之间进行选择 我选择后者是因为性能 但这意味着为
  • Python:Sklearn.linear_model.LinearRegression 工作很奇怪

    我正在尝试进行多变量线性回归 但我发现 sklearn linear model 的工作非常奇怪 这是我的代码 import numpy as np from sklearn import linear model b np array 3
  • 如何将 IDbTransactions 包装在 TransactionScope 中

    我有几种代码方法 如下所示 using var connection this connectionFactory GetConnection connection Open using var transaction connection
  • UICollectionView 不重用单元格

    只是好奇 是否可以禁用重用功能UICollectionview 我的单元数量有限 可能会有所不同 但单元的重新初始化可能有点繁重 我最好不要重复使用它们 尝试在不初始化单元格的情况下dequeueReusableCellWithReuseI
  • 在 Go 中生成随机数

    我试图在 Go 中生成随机数 整数 但无济于事 我找到了rand封装在crypto rand http golang org pkg crypto rand 这似乎是我想要的 但我无法从文档中得知如何使用它 这就是我现在正在尝试的 b by
  • 阻止显示 Windows 安全窗口

    I have some router config page URLs I have to load them set sth and save it I m using webbrowser control and Net 4 5 and
  • 尝试使用 OpenCV 显示图像时发生错误 (-215) size.width>0 && size.height>0

    我正在尝试运行一个从 OpenCV 读取图像的简单程序 但是 我收到此错误 error modules highgui src window cpp 281 error 215 size width gt 0 size height gt
  • 为什么在JavaScript中计算时差时得到+1小时?

    我试图创建一个非常简单的时差计算 只是 结束时间 开始时间 不过我得到了 1小时 我怀疑这与我的时区有关 因为我是 GMT 1 无论如何 这不会影响差异 因为开始时间和结束时间都位于同一时区 在这里检查我正在运行的示例代码 http jsf
  • 无法从 AppWidgetProvider 类中的线程进行祝酒

    我有一个应用程序小部件 可以从网络服务下载一些数据 在线程中 onReceive 通过点击它 完成后 小部件的 GUI 将更新为updateWidget 重新绘制 完成后我想干杯 我尝试了很多 比如在最后祝酒updateWidget 通过将