来自UI线程的cordova插件回调到javascript似乎在phonegap 3.3中被破坏了

时间:2013-12-17 16:16:35

标签: cordova phonegap-plugins cordova-3

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

这个非常简单的测试会失败,几乎与cordova最简单的插件开发片段相同。

在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的日志消息“成功返回 测试“打印在日志中。
  • “不起作用”表示日志消息 来自javascript没有打印(既不成功也不失败),电话 只是进入虚空。

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

我的测试设备是运行android 4.1.2的三星Galaxy S3通过phonegap 3.3 CLI编译了这个(我在2013年12月16日从npm开始的最新版本)

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我发现问题后忘了更新这个问题了。这是一个非常愚蠢的错误,希望它能帮助别人。

事实证明,我在项目中包含了cordova.js和phonegap.js。当你混合使用phonegap和cordova东西时会发生很多事情......首先使用cordova创建项目,然后将其转换为phonegap yada yada。

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