我可以在 Android 应用程序类中创建自定义全局方法吗?

2024-02-18

我目前有一个具有许多活动的应用程序,需要有一种方法来维护这些活动之间的状态。

我使用 Application 类来执行此操作,声明全局变量并使用 getter 和 setter 与我的活动进行交互。

我希望在那里放置一些自定义方法,以便当我想要执行常见任务(例如显示错误消息)时,我可以在我的应用程序类中声明该方法并从使用它的任何活动中调用它

EscarApplication application = (EscarApplication) this.getApplication();

EscarApplication 是我上面的应用程序类的名称。

我尝试将此方法包含在我的应用程序类中:

public void showError(String title, String message) {
        Log.i("Application level",message);
        this.alertDialog.setTitle(title);
        alertDialog.setMessage(message);
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                return;
            }
        });
        alertDialog.show();
    }

希望我可以从活动中调用此方法而不必重新声明它,但是当我使用如下所示的方法调用它时,我得到一个空指针异常:

Visit.this.application.showError("Update error", "An error has occurred while trying to communicate with the server");

访问是上面我当前活动的名称。

如果这可行,或者我可以只使用 getter 和 setter 来更改应用程序类中的全局变量。

堆栈跟踪:

java.lang.RuntimeException: Unable to start activity ComponentInfo{escar.beedge/escar.beedge.HomeScreen}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
at android.app.ActivityThread.access$2100(ActivityThread.java:116)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4203)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
at dalvik.system.NativeStart.main(Native Method)
ERROR/AndroidRuntime(375): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:460)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:238)
at escar.beedge.EscarApplication.showError(EscarApplication.java:98)
at escar.beedge.HomeScreen.onCreate(HomeScreen.java:30)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)

该对话框在应用程序类中声明如下:

AlertDialog alertDialog;

在同一个类中创建:

alertDialog = new AlertDialog.Builder(this).create();

在该类中调用它的方法如下:

public void showError(String title, String message) {
        alertDialog.setTitle(title);
        alertDialog.setMessage(message);
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                return;
            }
        });
        alertDialog.show();
    }

最后,它是从这样的活动中调用的:

EscarApplication application;
application = (EscarApplication) this.getApplication();
application.showError("test", "display this message");

如果您需要维护活动之间的状态,请使用服务。其他任何东西都是黑客

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

我可以在 Android 应用程序类中创建自定义全局方法吗? 的相关文章

随机推荐

  • 流星,mongodb,空格键,如何只显示小数点后两位

    我有一个具有类似值的集合 pctFail 0 3515500159795462 当我将其传递给模板并显示为 myTemplate 时 它在我的 html 中显示为 0 3515500159795462 如何将其显示为 0 35 您可以使用模
  • C# 中的结构体数组

    我正在尝试使用结构数组从用户那里获取输入 然后打印它 using System using System Collections Generic using System Linq using System Text namespace C
  • 使用 JavaScript 计算速度返回 NaN

    我正在按照此处显示的示例进行操作如何在 Javascript 中检测互联网速度 https stackoverflow com questions 5529718 how to detect internet speed in javasc
  • 在 Bootstrap 中向 span div 添加边框会弄乱布局

    我从 Twitter Bootstrap 开始 有一个关于布局如何在其中发挥作用的问题 这是 HTML
  • Bootstrap .popover()“显示”和“销毁”无法正常工作

    当我在 手动 模式下使用引导弹出窗口时 销毁 和 隐藏 无法正常工作 当我使用隐藏和销毁时 弹出窗口不透明度更改为 0 但它没有将显示更改为无 这导致弹出窗口容器覆盖其下方的内容 否则 如果我使用 toogle 模式 它可以正常工作 My
  • 当我们实例化一个对象时,是否会创建超类的实例?

    当我们在java中实例化一个特定的类时 是否会创建超类的实例 如果是这种情况 那么实例化所有超类将会产生大量开销 我尝试了以下代码 public class AClass public AClass System out println C
  • 倾斜阴影,而不是内容

    考虑 div class my class AAA div 我只想倾斜阴影 但不倾斜内容div将阴影放入伪元素中 my class height 5rem width 10rem before content box shadow 0 2e
  • 从用户代理检测设备(移动设备)是什么的php脚本?

    我尝试编写一个 php 脚本 从标头中的用户代理返回设备 我看到的问题并不是简单地执行正则表达式 因为设备之间存在差异 我错了吗 所以我想要根据用户代理更新的移动设备列表 我找到了这个清单 手机用户代理列表 http en wikipedi
  • 避免跨线程操作错误的最简洁和正确的方法?

    我不太擅长代表 也不明白幕后发生的事情 我得到了cross thread operation从不同线程访问 UI 项目时出错 我想做的是在 a 中编写一个通用函数Utility类 以便我可以将任何方法 代码块传递给该函数 我可以通过多种方式
  • 具有不规则节点的分层 data.frame 到 JSON

    我有这个嵌套数据集 grandparent parent child grandchild age Grandma 100 Grandma John 72 Grandma John Jessica 41 Grandma John Joann
  • XmlSerializer 更改编码

    我正在使用这段代码Serialize XML to String XmlWriterSettings xmlWriterSettings new XmlWriterSettings indent true Encoding Encoding
  • emacs 创建键修饰符

    我在 mac 操作系统上使用 emacs 我想将修饰符 Meta Control 映射到一个简单的键 基本上这就是我需要的 global set key kbd a hyper 这里 a 只是 a 键 没有 Control a 或其他什么
  • 用C解析CSV文件[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一个库可以用来解析 C 中的 CSV 文件 我在 Linux 系统上 我知道关于this http
  • 我需要为 NSObject 调用 [super init] 或 [super initWithCoder] 等

    通常当我从UIclass I 将调用感兴趣的超类初始值设定项 但是 我不确定实施细节NSObject 似乎在成员变量方面没有太多进展 所以我想知道 我需要打电话吗 super init 如果我的子类扩展NSObject 从技术上来说 不 这
  • 如何捕获 Python Unittest 测试用例失败的屏幕截图

    我使用 Python 3 6 5 和以下库 Appium Python 客户端 0 26 单元测试2 1 1 0 硒 3 5 0 pytest 3 6 3 现在我需要截图以防测试失败 所以我故意做了一个错误的陈述self driver fi
  • 无法理解使用 Eclipse 的 Maven pom 文件

    I am very new to Maven and i am creating my first maven project of maven archetype quickstart 然后它会生成错误消息 但在我的项目资源管理器中 我无
  • SICP中的图片语言如何使用框架?

    我似乎无法理解 SICP 中框架的实现 书中指出 我们将使用单位正方形中的坐标 0 图像如何表示为坐标 我能想到的唯一解释是 所有图像 都是线条 只能映射到一个框架 该框架的边界不能超过单位正方形的边界 但我对此表示怀疑 因为书中的下一行解
  • 如何在 Objective C 中打印出 bool

    我在 NSUserDefault 中为关键 TCshow 设置了一个 bool 值 我想运行 nslog 测试密钥是否已保存 并且我正在尝试打印布尔值 这是我的代码 但它不起作用 有什么建议吗 IBAction acceptAction i
  • 创建 T4 生成类型的泛型 List

    我使用 T4 技术创建了简单的类 lt template debug false hostspecific false language C gt lt output extension cs gt using System lt var
  • 我可以在 Android 应用程序类中创建自定义全局方法吗?

    我目前有一个具有许多活动的应用程序 需要有一种方法来维护这些活动之间的状态 我使用 Application 类来执行此操作 声明全局变量并使用 getter 和 setter 与我的活动进行交互 我希望在那里放置一些自定义方法 以便当我想要