java - 从 Java 调用 javascript 函数

标签 java javascript android cordova

我使用 PhoneGap 开发一个应用程序。我得到了一项位于后台且本地编码的服务(该服务和电话间隙应用程序位于同一项目中)。不幸的是,我想从此服务调用 javascript 函数。所以我在网上搜索并发现了一些有趣的东西:创建一个扩展Plugin的类并在其中进行一些处理。然后我发现了这个:

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");

如何解决这个问题?

最佳答案

最后我找到了解决方案:实际上 NullPointerException 位于 ctx 上。 为了解决这个问题,我设置了对象 cContext 值,如下所示:

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);

之前描述的execute方法中无需进行任何更改。但请注意调用 javascript 函数的方式。

埃尔万

关于java - 从 Java 调用 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8820428/

相关文章:

java - 如何记录一个接口(interface)所有实现的每个方法的时间成本

java - Spring-WS:自动wsdl故障生成/关联

javascript - 使用 Raphael.js 高效绘制文本

javascript - postMessage() 到子窗口无法发布

Android:带参数的 Http post 不起作用

Java找到两条线的交点

java - 我们可以在 Java Swing 中模仿 GTK+ 2.0 按钮样式吗?

javascript - 如何在 AngularJS 的 ng-init 中使用三元?

java - null 对象引用上的 childEventListerer,Firebase 数据库

java - 创建一个新文件,然后写入