java - NullPointerException:尝试调用虚拟方法'void org.apache.cordova.CordovaPlugin.privateInitialize
问题描述
我正在对我的科尔多瓦插件进行一些重构,我开始在启动时遇到这个崩溃:
--------- beginning of crash
12-12 21:42:29.791 4693 4693 E AndroidRuntime: FATAL EXCEPTION: main
12-12 21:42:29.791 4693 4693 E AndroidRuntime: Process: xyz.meris.app, PID: 4693
12-12 21:42:29.791 4693 4693 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{xyz.meris.app/xyz.meris.app.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void org.apache.cordova.CordovaPlugin.privateInitialize(java.lang.String, org.apache.cordova.CordovaInterface, org.apache.cordova.CordovaWebView, org.apache.cordova.CordovaPreferences)' on a null object reference
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3162)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3305)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1993)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.os.Looper.loop(Looper.java:216)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7266)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void org.apache.cordova.CordovaPlugin.privateInitialize(java.lang.String, org.apache.cordova.CordovaInterface, org.apache.cordova.CordovaWebView, org.apache.cordova.CordovaPreferences)' on a null object reference
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at org.apache.cordova.PluginManager.getPlugin(PluginManager.java:171)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at org.apache.cordova.PluginManager.startupPlugins(PluginManager.java:97)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at org.apache.cordova.PluginManager.init(PluginManager.java:86)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at org.apache.cordova.CordovaWebViewImpl.init(CordovaWebViewImpl.java:117)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at org.apache.cordova.CordovaActivity.init(CordovaActivity.java:149)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at org.apache.cordova.CordovaActivity.loadUrl(CordovaActivity.java:224)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at xyz.meris.app.MainActivity.onCreate(MainActivity.java:39)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:7353)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:7344)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3142)
12-12 21:42:29.791 4693 4693 E AndroidRuntime: ... 11 more
12-12 21:42:29.826 4693 4693 I Process : Sending signal. PID: 4693 SIG: 9
我四处寻找,发现了一些类似的问题:
但是解决方案对我不起作用...
解决方案
我从其他问题中得到了一些线索,因为我正在重构,所以我一直在使用该plugin.xml
文件。
我注意到我与其他plugin.xml
文件有以下区别:
<feature name="CDVProcessLog">
<param name="android-package" value="xyz.meris.processlog.CDVProcessLog" />
<param name="onload" value="true" />
</feature>
<feature name="ProcessLog">
<param name="android-package" value="xyz.meris.processlog.ProcessLog" />
+ <param name="onload" value="true" />
</feature>
因为我复制了<feature>
标签并填写了它,所以我复制了onload
参数。一旦我删除了重复的onload
参数,崩溃就停止了。
编辑: ERP。原来我有另一个导致这个问题的错误。
删除onload
参数延迟加载ProcessLog
。所以我稍后会得到一个空指针错误。
我真正的问题是我的.js
文件没有用我的CordovaPlugin
班级名称更新。我已将其从 更改ProcessLog
为CDVProcessLog
。 ProcessLog
现在有了处理日志的细节,并且CDVProcessLog
大部分都用科尔多瓦胶水来调用我的方法ProcessLog
。
我的.js
文件需要更改:
return new Promise((resolve, reject) => {
- exec(resolve, reject, 'ProcessLog', func, [...args]);
+ exec(resolve, reject, 'CDVProcessLog', func, [...args]);
});
推荐阅读
- php - json解析错误意外eof土耳其字符
- python - Sklearn 变换错误:预期 2D 数组,得到 1D 数组
- php - 即使 sendmail 工作,WordPress 也无法发送电子邮件
- swift4 - truncatingRemainder(dividingBy: ) 返回非零余数,即使数字是完全可除的
- django - 如何向 Django Oscar 注册合作伙伴发送有关已下订单的电子邮件?
- reactjs - ReactJS 表单验证瑞典社会安全号码
- c# - Microsoft.NETCore.Platforms 无法安装,因为它与您的任何项目都不兼容
- azure-functions - 同一功能应用内的不同绑定
- c# - 在将python代码转换为C#期间,hmacsha编码成为一个问题
- html - 如何将值从 html 传递到 django 中查看?