我使用PhoneGap开发应用程序。我得到了一个后台服务,并且是本地编码的(服务和手机间隙应用程序在同一个项目中)。不幸的是,我想从这个服务调用一个javascript函数。所以我在网上搜索并创建了一些有趣的东西:创建一个扩展插件的类并在其中进行一些处理。然后我发现了这个:
this.ctx.sendJavascript("myJavascriptFunction");
我使用此代码进行了测试,但发生了错误:
java.lang.NullPointerException
以下是我测试的方式:
class c = new class();
c.execute("myFunction",null,null);
在类c中,execute方法如下:
public PluginResult execute(String action, JSONArray args, String callbackId) {
if (action.equals("myFunction")){
Log.d(TAG,"start actions to do");
this.ctx.sendJavascript("nameOfFunctionToLaunch");
Log.d(TAG,"end actions to do");
return new PluginResult(PluginResult.Status.OK);
}
}
当应用开始时,我有第一个
Log.d(TAG,"start actions to do");
我该如何解决这个问题?
答案 0 :(得分:0)
你不能调用object.loadUrl(“javascript:function();”);来自插件的插件并没有扩展Android的WebView。 要调用loadUrl,您必须将调用传递回扩展DroidGap的Home类。
在插件中,您可以定义
Home home = null;
Looper.prepare();
home = new Home();
home.somefunc();
并在somefunc调用中
super.loadUrl("javascript:function();");
答案 1 :(得分:0)
最后我找到了解决方案:实际上 NullPointerException 在 ctx 上。 为了解决这个问题,我设置了我的对象 c 的上下文值,如下所示:
c.setContext(use_An_Object_Of_Type_PhonegapActivity);
要获取对象,我会从此方法的AppActivity中获取它:
public class CloudPhoneAppActivity extends DroidGap {
private class NoScaleWebViewClient extends GapViewClient {
public NoScaleWebViewClient(DroidGap ctx) {
super(ctx);
myApp.ctx = ctx;
}
public void onScaleChanged(WebView view, float oldScale, float newScale) {
Log.d("NoScaleWebViewClient", "Scale changed: " + String.valueOf(oldScale) + " => " + String.valueOf(newScale));
}
}
/** other stuff after**/
}
所以最后这里是解决方案:
class c = new class();
c.setContext(myApp.ctx);
c.execute("myFunction",null,null);
之前描述的执行方法没有变化。但要小心你如何调用javascript函数。
二万