0

PhoneGap为 android 创建了一个插件,它发送一个email.

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

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

无法创建未调用错误的handler内部线程。Looper.prepare()

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

4

1 回答 1

1

如果WebActivity实际上是一个活动(即 extends Activity),那么您有几件事是错误的。


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

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


您看到的错误是每个Activity期望从 UI 线程(或至少从Looper线程)调用的结果。您最喜欢调用的函数Handler以某种方式直接或间接使用。当这个函数创建一个Handler然后发布一条消息时,Runnable你会得到你看到的错误。

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


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

于 2011-12-20T08:01:54.030 回答