Обратный вызов плагина Cordova для javascript из потока пользовательского интерфейса, похоже, не работает в phonegap 3.3

Я пытался использовать плагин FacebookConnect для телефонной связи и обнаружил, что он не выполняет обратный вызов, несмотря на успешный вход в систему, после некоторого копания и отслеживания журнала java я свел проблему к этому простому примеру, который напоминает ту же проблему, что я обнаружил с FacebookConnect плагин ...

этот чрезвычайно простой тест провалится, почти идентичный самому простому фрагменту разработки плагина Cordova.

In 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 не было напечатано (ни успеха, ни ошибки), вызов просто ушел в пустоту.

Я новичок в телефонной связи и кордове, поэтому я не знаю, будет ли этот конкретный тест работать в предыдущих версиях.

Мое тестовое устройство — Samsung Galaxy S3 под управлением Android 4.1.2. Скомпилировано с помощью CLI phonegap 3.3 (самое новое, которое я вытащил из npm 16 декабря 2013 г.)

Кто-нибудь знает / или проверял, работает ли эта комбинация версий или это только мое устройство / ОС?


person JChow    schedule 17.12.2013    source источник
comment
Вы можете использовать этот плагин github.com/studiosoton/faceGap без использования собственного плагина, проверьте его.   -  person Mohamed Salah    schedule 17.12.2013
comment
или вы должны обновить плагин, такой как phonegap 3 docs.phonegap. com/en/край/   -  person Mohamed Salah    schedule 17.12.2013
comment
Мохамд, я не пробовал эту ссылку, но я провел немало исследований и не думаю, что можно войти в Facebook в нативных приложениях без плагина нативного кода. И, по сути, git, на который вы указали, совсем не похож на плагин для телефонной связи, поскольку он основан на чистом javascript, поэтому он выглядит просто оболочкой для http-вызовов oauth facebook.   -  person JChow    schedule 17.12.2013
comment
И чтобы уточнить, моя проблема не в том, что плагин системно не работает как плагин. Я могу установить плагин - вообще без проблем. Это что-то внутри кода делает его логически неработающим для меня. И я проследил это до кода Java для плагина, который я написал простой тест, чтобы воспроизвести проблему, которую я обнаружил с кодом плагина.   -  person JChow    schedule 17.12.2013
comment
Ты что-нибудь понял, @JChow? У меня почти такие же проблемы, но только на устройствах Samsung. Не будет работать из потоков вообще.   -  person hnilsen    schedule 07.07.2014


Ответы (2)


Убедитесь, что вы возвращаете true из метода execute в Java. Если вы вернете false, ваш обратный вызов успеха никогда не будет вызван.

person andypaxo    schedule 20.02.2014
comment
Хотя это не был принятый ответ, это следует должным образом отметить всем, кто попадает на эту страницу! Сталкивался с этим раньше - person babycakes; 20.11.2016

Я забыл обновить этот вопрос после того, как нашел свою проблему. Это была действительно глупая ошибка, надеюсь, это поможет кому-то еще.

Проблема заключается в том, что я включил в свой проект как cordova.js, так и phonegap.js. Это происходит часто, когда вы смешиваете телефонную связь и кордову... сначала создайте проект с помощью кордовы, а затем преобразуйте ее в телефонную связь, да-да.

В любом случае, cordova.js и phonegap.js — это, по сути, одни и те же файлы. Все переменные, имена методов определяются точно так же. По-видимому, когда вызовы методов возвращались из материалов Java, обмен результатами из очереди запутался, и в моем случае экземпляр возвращаемой переменной Cordova получил результат, но не экземпляр phonegap. Поэтому результат, возвращаемый для моего экземпляра phonegap, всегда был пустым.

person JChow    schedule 08.07.2014