Java 安卓&;PhoneGap--在NPObject上调用方法时出错
我试图在我的phonegap应用程序中设置锁定时的Java 安卓&;PhoneGap--在NPObject上调用方法时出错,java,android,cordova,Java,Android,Cordova,我试图在我的phonegap应用程序中设置锁定时的FLAG\u SHOW\u,但仅当显示某个页面时。为此,我有一个从CordovaPlugin扩展而来的Java插件,在execute方法中有以下代码: if (action.equals("showWhenLocked")) { boolean showWhenLocked = args.getBoolean(0); if (showWhenLocked) { this.cordova.getActivity()
FLAG\u SHOW\u,但仅当显示某个页面时。为此,我有一个从CordovaPlugin
扩展而来的Java插件,在execute
方法中有以下代码:
if (action.equals("showWhenLocked")) {
boolean showWhenLocked = args.getBoolean(0);
if (showWhenLocked) {
this.cordova.getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
} else {
this.cordova.getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}
callbackContext.success();
return true;
}
使用cordova.exec(null,null,'MyPluginClass','showWhenLocked',[myVar])调用它。
,但在执行时,我会得到错误
Uncaught Error: Error calling method on NPObject. at file:///android_asset/www/cordova-2.2.0.js:984
知道是什么原因/我做错了什么以及如何修复它吗?如果我在创建活动时设置了该标志,它就可以正常工作。使用:
callbackContext.success();
将显式调用成功回调,但在您的情况下,成功回调为null,因此会出现错误
尝试使用:
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
这样,exec调用将返回,但是JS将在尝试调用它之前检查是否有成功的回调。我已经发现,这种错误可能是由需要不可用线程的调用引起的。您使用的getWindow()
告诉我,这种可能性更大。您很可能正在访问被另一个线程(如UI线程)锁定的信息。查看关于UI线程中线程的部分中的cordova。将android-support-v4.jar添加到项目构建路径中,并在构建路径的顺序和导出(选项卡)中检查它的条目对我来说很有用。-谢谢,不幸的是,Prodeveloper没有改变任何东西。此外,我还使用了callbackContext.success()代码>为另一个插件,我调用没有回调,没有问题。现在,我在这两种情况下都更改了它,但正如前面提到的——没有效果。如果我注释掉addFlags
调用,我不会得到任何错误。所以我猜那个电话有问题?谢谢。我以前考虑过线程问题,但我认为我没有使用UI线程,所以应该没问题——有点幼稚。我试试看,让你知道。这可能需要几天的时间。事实上,在过去的几天里,我已经在phonegap插件上看到过这条消息好几次了。当您正在使用的函数抛出未捕获的异常时,也会发生这种情况。了解实际情况的最佳方法是将调用放入try、catch和useLog.d(“TAG”,e.toString())代码>以获取错误报告。在一个案例中,我发现我的try-catch没有被捕获,所以我使用了Error
而不是Exception
,并发现了我的问题。我不知道我以前怎么没有想到捕获错误。我也要试试,谢谢。再说一次,这可能需要一段时间,对此我深表歉意。我肯定会回到这里,并(如果成功的话)接受答案等。我现在尝试捕捉错误,它是一个调用FromErrorThreadException(“只有创建视图层次结构的原始线程才能接触其视图”)。在UI线程上运行它不会再抛出这个错误,但是我仍然需要检查它是否真的在很快的某个时候工作。伙计们,我保证我不会忘记——我终于有时间完成了。在UI线程上运行它最终成功了。谢谢