从Phonegap Android插件执行JS函数

时间:2012-01-16 12:16:23

标签: android cordova phonegap-plugins

我正在使用 Phonegap v1.3 制作 Phonegap Android应用。我为phonegap写了一个插件,它从系统中获取一个特定的文件,然后执行一个js函数。
由于所有插件都扩展了Phonegap类插件,我无法直接从那里执行js函数。所以从插件的执行功能,我执行 - >

PluginResult result = null;
Home home = new Home();
result = new PluginResult(Status.OK);
home.loadPage("pic.jpg");

在这里,Home是我的主要课程,它扩展了 Droidgap。
在家里我有功能 loadPage

public void loadPage(String filePath){   
super.setIntegerProperty("loadUrlTimeoutValue", 60000);
super.loadUrl("javascript:navigator.somefunc(\""+filePath+"\");");  
}

问题是DroidGap的 setIntegerProperty 功能正在抛出一个NPE。这是日志。

01-16 11:41:32.364: W/System.err(13162): java.lang.NullPointerException
01-16 11:41:32.364: W/System.err(13162):    at com.phonegap.DroidGap.setIntegerProperty(DroidGap.java:738)
01-16 11:41:32.364: W/System.err(13162):    at e2o.mobile.Home.loadSharePage(Home.java:120)
01-16 11:41:32.364: W/System.err(13162):    at com.phonegap.plugins.checkImage.CheckUploadImage.execute(CheckUploadImage.java:158)
01-16 11:41:32.364: W/System.err(13162):    at com.phonegap.api.PluginManager$1.run(PluginManager.java:150)
01-16 11:41:32.364: W/System.err(13162):    at java.lang.Thread.run(Thread.java:1019)

主要在setIntegerProperty函数中 -

public void setIntegerProperty(String name, int value) {
    this.getIntent().putExtra(name, value);
}

this.getIntent()返回null。 你能不能告诉我我错过了什么。或者在我的用例场景中,我如何执行该js函数。如果我不使用

super.setIntegerProperty("loadUrlTimeoutValue", 60000, intent);

然后loadUrl也什么都不做。 JS没有被调用,或者它超时。

1 个答案:

答案 0 :(得分:2)

这是因为您正在实例化一个新的Home对象。使用构造函数创建对象,但不调用onCreate方法,因此不会发生许多正确的对象设置。这就是你得到NullPointerException的原因。

您正在返回状态为OK的新PluginResult,因此可以为您执行navigator.somefunc(filePath)方法的成功功能。这样会更容易。