0

我创建了一个PhoneGap插件为Android发送emailPhoneGap android:越来越不能创建处理程序内部线程没有调用Looper.prepare()

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.

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

回答

1

如果WebActivity实际上是一项活动(即扩展为Activity),那么您有几件事情是错误的。


您不能自己创建Activity对象。那么,你可以,但是你必须为它们分配一个上下文(我不确定这些内容甚至可能不使用内部),并且管理Activity的生命周期。

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


您所看到的错误是,每个Activity预计从UI线程调用(或Looper线程至少)的结果。您最喜欢的功能使用Handler以某种方式,直接或间接。当此功能创建Handler,然后发布消息或Runnable时,您将看到您看到的错误。

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


作为一个解决方案,如果你有超过WebActivity控制,移动createExternalStoragePrivateFile()功能到一些独立的类或使其静态的(如果可能的话),或两者兼而有之。你很可能需要在那里解决一两件事,以使其工作。但至少你可以从其他地方调用该函数。

+0

thanx的回复,在createExternalStoragePrivateFile()函数即时复制资产文件夹中的文件到SD卡上的外部文件, 如果我创建另一个独立的静态类,那么如何访问assets文件夹中的文件..? – 2011-12-20 08:49:59

+1

传递上下文:'createExternakStoragePrivateFile(Context)'。然后你就可以访问'AssetManager'并复制文件。 – inazaruk 2011-12-20 09:24:39

+0

Thanku inazaruk,它工作:) – 2011-12-21 04:15:55

相关问题