NullPointerException:尝试调用虚拟方法'void org.apache.cordova.CordovaPlugin.privateInitialize [英] NullPointerException: Attempt to invoke virtual method 'void org.apache.cordova.CordovaPlugin.privateInitialize

查看:197
本文介绍了NullPointerException:尝试调用虚拟方法'void org.apache.cordova.CordovaPlugin.privateInitialize的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究我的cordova插件进行一些重构,并且在启动时开始遇到此崩溃:

I was working away on my cordova plugin doing some refactoring and I started to get this crash on startup:

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

我到处闲逛,发现了一些类似的问题:

I hunted around and found some similar questions:

但是解决方案对我不起作用...

But the solutions did not work for me...

推荐答案

我从其他问题中获得了一些线索,并且由于我在进行重构,所以我一直在使用 plugin.xml 文件.

I got some clues from the other questions and because I was refactoring I had been working with the plugin.xml file.

我注意到我与其他 plugin.xml 文件有此区别:

I noticed that I had this difference from other plugin.xml files:

      <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 参数,崩溃便不再发生.

Because I copied the <feature> tag and just filled it in I had copied the onload parameter. Once I removed the duplicate onload parameter the crash stopped happening.

erp.原来我还有另一个导致此问题的错误.

erp. Turns out I had another error that was causing this issue.

删除 onload 参数延迟加载的 ProcessLog .所以以后我会得到一个空指针错误.

Removing the onload param lazy loaded ProcessLog. So I would get a null pointer error later.

我的真正问题是我的 .js 文件没有使用我的 CordovaPlugin 类名进行更新.我已将其从 ProcessLog 更改为 CDVProcessLog . ProcessLog 现在具有处理日志的细节,而 CDVProcessLog 主要具有cordova胶,可以在 ProcessLog 中调用我的方法.

My real problem was that my .js file did not get updated with my CordovaPlugin class name. I had changed it from ProcessLogto CDVProcessLog. ProcessLog now had the specifics for processing the log and CDVProcessLog had mostly cordova glue to call my methods in ProcessLog.

我的 .js 文件需要更改:

  return new Promise((resolve, reject) => {
-    exec(resolve, reject, 'ProcessLog', func, [...args]);
+    exec(resolve, reject, 'CDVProcessLog', func, [...args]);
  });

这篇关于NullPointerException:尝试调用虚拟方法'void org.apache.cordova.CordovaPlugin.privateInitialize的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆