【问题标题】:Android & PhoneGap -- Error calling method on NPObjectAndroid & PhoneGap -- 在 NPObject 上调用方法时出错
【发布时间】:2013-01-09 01:56:52
【问题描述】:

我正在尝试在我的 phonegap 应用中设置 FLAG_SHOW_WHEN_LOCKED,但仅在显示特定页面时。为此,我有一个从 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

任何想法是什么导致了这个/我做错了什么以及如何解决它?如果我在创建活动时设置标志,它就可以正常工作。

【问题讨论】:

    标签: java android cordova


    【解决方案1】:

    我已经发现这种错误可能是由需要不可用线程的调用引起的。您对getWindow() 的使用告诉我这更有可能。您很可能正在访问被另一个线程(如 UI 线程)锁定的信息。查看有关 UI 线程中的线程部分中的 cordova documentation

    【讨论】:

    • 谢谢。我之前考虑过线程问题,但认为我没有使用 UI 线程,所以应该没问题——有点天真。我会试试这个,让你知道。不过,这可能需要几天时间。
    • 在过去的几天里,我实际上已经多次看到此消息,其中包含 phonegap 插件。当您使用的函数抛出未捕获的异常时,也会发生这种情况。找出真正发生的事情的最佳方法是将您的调用置于 try、catch 中并使用 Log.d("TAG",e.toString()); 获取错误报告。在一种情况下,我发现我的 try-catch 没有捕捉到,所以我使用 Error 而不是 Exception 并发现了我的问题。
    • 我不知道我以前怎么没想到会发现错误。我也试试,谢谢同样,这可能需要一段时间,对此我深表歉意。我一定会回到这里并(如果有效)接受答案等。
    • 我现在尝试捕获错误,它是 CalledFromWrongThreadException(“只有创建视图层次结构的原始线程才能触及其视图。”)。在 UI 线程上运行它不会再抛出此错误,但是我仍然需要检查它是否真的在不久的将来工作。
    • 好吧,伙计们,我保证我不会忘记——我终于有时间完成这个了。在 UI 线程上运行它终于成功了。谢谢!
    【解决方案2】:

    使用:

    callbackContext.success();
    

    将显式调用成功回调,但在您的情况下,成功回调为空,这就是您收到错误的原因。

    尝试使用:

    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
    

    这样 exec 调用会返回,但 JS 会在尝试调用之前检查是否有成功回调。

    【讨论】:

    • 不幸的是,没有改变任何东西。另外,我已经将callbackContext.success(); 用于另一个我调用的插件,没有回调并且没有问题。我现在在这两种情况下都更改了它,但如上所述 - 没有效果。
    • 如果我注释掉 addFlags 调用,我不会收到任何错误。所以我猜那个电话有问题?
    【解决方案3】:

    android-support-v4.jar 添加到项目构建路径并检查它在构建路径的 Order and Export (tab) 中的条目对我有用。 - 谢谢,Prodeveloper

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多