gpt4 book ai didi

java - PhoneGap android : getting cannot create handler inside thread that has not called Looper. 准备()

转载 作者:行者123 更新时间:2023-12-01 15:37:58 27 4
gpt4 key购买 nike

我为 Android 创建了一个 PhoneGap 插件,用于发送电子邮件

public PluginResult execute(String action, JSONArray args, String callbackId) {
try {
// i want to call a function from other class so i did the
// below, but it is throwing the above said error...

WebActivity wb = new WebActivity();
wb.createExternalStoragePrivateFile(img);

//sending email code here
}
}

在上面的代码中,当访问另一个类的函数时,我收到错误:

cannot create handler inside thread that has not called Looper.prepare() error.

调用该函数的正确方法是什么?

最佳答案

如果WebActivity实际上是一个 Activity (即扩展Activity),那么你就犯了一些错误。

<小时/>

您不得自行创建Activity 对象。好吧,你可以,但是你必须为它们分配一个上下文(我什至不确定在不使用内部结构的情况下是否可能),并管理 Activity 生命周期。

您不能只创建一个 Activity 对象并调用一个函数。此函数可能具有生命周期和上下文依赖性(即您可能必须“恢复” Activity )。

<小时/>

您看到的错误是每个 Activity 期望从 UI 线程(或至少从 Looper 线程)调用的结果。您最常调用的函数以某种方式直接或间接地使用Handler。当此函数创建 Handler 然后发布消息或 Runnable 时,您将收到所看到的错误。

但同样,这是因为 Activity 并不适合按照您所使用的方式使用。您不能只创建 Activity 并开始调用它的方法。你基本上违反了它的状态模型。所以 Activity 甚至不应该工作。

<小时/>

作为解决方案,如果您可以控制 WebActivity,请将 createExternalStoragePrivateFile() 函数移动到某个独立的类中或使其静态(如果可能),或两者兼而有之。您很可能需要修复一两件事才能使其正常工作。但至少您可以从其他地方调用该函数。

关于java - PhoneGap android : getting cannot create handler inside thread that has not called Looper. 准备(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8572142/

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