【问题标题】:cordova plugin callback to javascript from UI Thread seems to be broken in phonegap 3.3从 UI Thread 到 javascript 的 cordova 插件回调似乎在 phonegap 3.3 中被破坏了
【发布时间】:2014-07-08 12:45:29
【问题描述】:

我试图将 FacebookConnect 插件用于 phonegap,发现尽管登录成功,但它没有进行回调,经过一些挖掘和 java 日志跟踪后,我将问题归结为这个简单的示例,它类似于我发现的相同问题使用 FacebookConnect 插件...

这个极其简单的测试会失败,几乎与 cordova 最简单的插件 dev sn-p 相同。

在 JS 中:

var cordova = window.cordova || window.Cordova; 
MyTest = { 
    test: function() { 
        console.log("Testing"); 
        alert("Testing"); 
        cordova.exec(function(){ 
                console.log("successful return from test"); 
            }, 
            function(){ 
                console.log("failed return"); 
            }, 'org.apache.cordova.mything.MyTest', 'test', []); 
        } 
    }    

在 Java 中:

public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
    if (action.equals("test")) {
        //Call Back HERE would work
        callbackContext.success(new JSONObject("{}")); 
        cordova.getActivity().runOnUiThread(new Runnable() {
            public void run() {
                //Callback here DOES NOT WORK
                //callbackContext.success(new JSONObject());
            };
        });            
    }
}

在这个问题的上下文中:

  • “工作”表示来自 javascript 的日志消息“成功返回 test”在日志中打印出来。
  • “不工作”表示日志消息 来自 javascript 的没有打印(既不成功也不失败),调用 只是进入了虚空。

我是 phonegap 和 cordova 的新手,所以我不知道这个特定的测试是否适用于以前的版本。

我的测试设备是运行 android 4.1.2 的三星 Galaxy S3,通过 phonegap 3.3 CLI 编译(我于 2013 年 12 月 16 日从 npm 提取的最新版本)

有人知道/或测试过这个版本组合是否有效,或者它只是我的设备/操作系统?

【问题讨论】:

  • 你可以使用这个插件github.com/studiosoton/faceGap而不使用原生插件检查它
  • 或者你必须更新插件,比如 phonegap 3 docs.phonegap.com/en/edge/…
  • mohamd,我没有尝试过那个链接,但我已经做了很多研究,我认为没有本机代码插件就不可能在本机应用程序中登录 Facebook .本质上,您指向的 git 看起来根本不像 phonegap 插件,因为它是纯 JavaScript 的,所以它看起来只是 facebook 的 oauth http 调用的包装器。
  • 澄清一下,我的问题不在于该插件不能作为插件系统地工作。我可以安装插件 - 完全没有问题。正是代码中的某些东西使它在逻辑上对我不起作用。我将其追溯到插件的 Java 代码,我编写了一个简单的测试来重现我在插件代码中发现的问题。
  • 你有什么发现吗,@JChow?我有很多相同的问题,但仅限于三星设备。根本无法使用线程。

标签: cordova phonegap-plugins cordova-3


【解决方案1】:

检查以确保您从 Java 中的 execute 方法返回 true。如果你返回false,你的成功回调将永远不会被调用。

【讨论】:

  • 虽然这不是公认的答案,但所有最终访问此页面的人都应该注意这一点!以前曾为此苦苦挣扎过
【解决方案2】:

我发现问题后忘记更新此问题。这是一个非常愚蠢的错误,但希望它会对其他人有所帮助。

问题出在我的项目中同时包含了cordova.js 和phonegap.js。当您混合使用 phonegap 和 cordova 的东西时,经常会发生这种情况……首先使用 cordova 创建项目,然后将其转换为 phonegap yada yada。

无论如何,cordova.js 和 phonegap.js 本质上是相同的文件。所有变量、方法名称的定义方式完全相同。显然,当从 Java 东西返回的方法调用时,来自队列的结果交换变得混乱,在我的情况下,返回变量的 cordova 实例得到了结果,但不是 phonegap 实例。因此,我的 phonegap 实例返回的结果始终为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-07
    • 2012-12-19
    • 2020-02-22
    • 2018-11-04
    • 1970-01-01
    • 2015-10-13
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多