创建一个自定义Apache Cordova插件Echo.java
NullPointer Exception from PluginManager - Creating a custom Apache Cordova Plugin Echo.java
我一直在尝试从现有的Echo插件创建一个示例插件。我一直得到以下错误:
W/System.err(1894): java.lang.NullPointerException: cls == null
W/System.err(1894): at java.lang.Class.isAssignableFrom(Native Method)
W/System.err(1894): at org.apache.cordova.PluginManager.instantiatePlugin(PluginManager.java:489)
W/System.err(1894): at org.apache.cordova.PluginManager.getPlugin(PluginManager.java:167)
W/System.err(1894): at org.apache.cordova.PluginManager.exec(PluginManager.java:120)
W/System.err(1894): at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:59)
W/System.err(1894): at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
W/System.err(1894): at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
W/System.err(1894): at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
W/System.err(1894): at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err(1894): at android.os.Looper.loop(Looper.java:136)
W/System.err(1894): at android.os.HandlerThread.run(HandlerThread.java:61)
I/System.out(1894): Error adding plugin .
W/System.err(1894): java.lang.NullPointerException
W/System.err(1894): at org.apache.cordova.PluginManager.getPlugin(PluginManager.java:169)
W/System.err(1894): at org.apache.cordova.PluginManager.exec(PluginManager.java:120)
W/System.err(1894): at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:59)
W/System.err(1894): at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
W/System.err(1894): at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
W/System.err(1894): at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
W/System.err(1894): at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err(1894): at android.os.Looper.loop(Looper.java:136)
W/System.err(1894): at android.os.HandlerThread.run(HandlerThread.java:61)
下面是我的文件:
Echo.java
package com.gerald.example.sampleecho;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.json.JSONArray;
import org.json.JSONException;
import android.util.Log;
public class Echo extends CordovaPlugin {
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
// TODO Auto-generated method stub
super.initialize(cordova, webView);
Log.d("SAMPLE_ECHO", "initializing");
}
@Override
public boolean execute(String action, JSONArray args,
CallbackContext callbackContext) throws JSONException {
Log.d("SAMPLE_ECHO", action);
if(action.equals("echo")){
String message = args.getString(0);
this.echo(message, callbackContext);
return true;
}
return false;
}
private void echo(String message, CallbackContext callbackContext){
Log.d("SAMPLE_ECHO", "Echoing...");
if(message != null && message.length()>0){
callbackContext.success(message);
}else{
callbackContext.error("Expected one non-empty string argument.");
}
}
}
plugin.xml如下所示
plugin . xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="com.gerald.example.sampleecho.echo"
version="1.2.2">
<name>SampleEcho</name>
<description>Echoes stuff</description>
<author>Oyudo Gerald</author>
<js-module src="www/echo.js" name="echo" >
<clobbers target="myEcho"/>
</js-module>
<engines>
<engine name="cordova" version="4.0.2"/>
</engines>
<!-- android -->
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="Echo"
value="com.gerald.example.sampleecho.Echo"/>
</config-file>
<source-file src="src/com/gerald/example/sampleecho/Echo.java"
target-dir="src/com/gerald/example/sampleecho" />
</platform>
</plugin>
和HTML代码
index . html
<html>
<head>
<title>HelloWorld!</title>
<meta charset="UTF-8">
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript">
function onBodyLoad(){
document.addEventListener("deviceready",onDeviceReady, false);
}
function onDeviceReady(){
br = "<br />";
//Get the appInfo DOM element
var element = document.getElementById("appInfo");
////Replace it with specific information about the device
////running the application
element.innerHTML = 'Cordova Version: ' +
device.cordova + br +
'Platform: ' + device.platform + br +
'Model: ' + device.model + br +
'OS Version: ' + device.version;
}
function doEcho(){
myEcho.echo("Plugin installed successfully", function(message){
alert(message);
});
}
</script>
</head>
<body onload="onBodyLoad()">
<h1>Hello World</h1>
<p>This is a sample Cordova application</p>
<p id ="appInfo">
waiting for cordova initialization to complete
</p>
<button onclick="doEcho();">Please Echo</button>
</body>
</html>
我正在使用cordova版本4.0.2和JDK 8。堆栈跟踪中没有引用我的代码的部分,所以我甚至不知道从哪里开始。我哪里做错了?
我在eclipse调试模式下运行android项目,我注意到我的插件类的字符串表示被传递给CordovaWebViewImpl和PluginManager,我猜这就是错误的产生方式。新的问题是为什么我的插件的pluginEntry为空时,从cordoainterface通过init()方法传递到CordovaWebViewImpl ?
and…经过一整天的尝试,我终于通过研究ConfigXMLParser发现下面插件的特性格式是无法读取的。
<feature name="Echo"
value="com.gerald.example.sampleecho.Echo"/>
请使用以下语句:
<feature name="Echo">
<param name="android-package" value="com.gerald.example.sampleecho.Echo" />
</feature>
相关文章:
- 如何在方向更改时重新调整/排列布局(Apache Cordova)
- 带有Apache Cordova的Android应用程序
- Apache Cordova:在不启动浏览器应用程序的情况下运行Cordova运行浏览器
- Apache Cordova(PhoneGap)2.0中的谷歌adMob,无插件
- Apache Cordova可以编译到传统的Windows桌面应用程序(非metro)吗
- 如何记录Apache Cordova应用程序中加载的iframe的http响应
- Windows Azure Notification Hubs 插件 for Apache Cordova on Pho
- Apache Cordova(Phonegap):是跨站点脚本所需的jsonp
- Apache Cordova:运行时发布更新索引.html
- 使用 JQuery fileTree for Apache Cordova 应用程序
- Apache Cordova应用程序未更新
- Microsoft EWS with Apache Cordova
- 使用 Apache Cordova for Visual Studio 进行身份验证
- 用Javascript Apache Cordova创建PDF并通过电子邮件发送
- Apache Cordova,SQLite,从[表]中删除id=?不会返回
- 有什么方法可以从扩展org.apache.cordova.CordobaPlugin.java的java类异步调用js函
- phoneGap/Apache Cordova媒体捕获插件-多视频录制
- 在应用商店中使用Apache Cordova MS VS扩展保护应用程序
- 我无法使用Apache cordova dbcopy插件
- Apache Cordova:生成失败错误代码1和Javascript异常