我试图使用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());
};
});
}
}
在此问题的背景下:
我是phonegap和cordova的新手,所以我不知道这个特定的测试是否适用于以前的版本。
我的测试设备是运行android 4.1.2的三星Galaxy S3通过phonegap 3.3 CLI编译了这个(我在2013年12月16日从npm开始的最新版本)
有人知道/或测试过这个版本组合是否有效,或者只是我的设备/操作系统?
答案 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实例返回的结果始终为空。