Что я пытаюсь сделать:
- пользователь заполняет данные формы, нажимает кнопку отправить.
- пользователю предоставлен загрузочный экран. (Элемент HTML).
- Приложение выполняет асинхронный вызов, плагин PhoneGap, который сохраняет эти данные в дБ. Вот в чем проблема, потому что вместо этого вызов синхронный.
- Когда приложение html получает обратный вызов, я скрываю экран загрузки.
Из-за синхронного вызова я получил вот что:
- пользователь заполняет форму, отправляет
- Приложение HTML зависает, данные сохраняются в базе данных.
- появляется экран загрузки
- вызывается обратный вызов, через несколько миллисекунд после.
Вот некоторый демонстрационный (урезанный) код:
Java:
public class SomePlugin extends Plugin
...
public PluginResult execute(String action, JSONArray data, String callbackId)
{
PluginResult result = null;
//
// save data in the background...
//
Log.d("TAG", "Some Message...");
result = new PluginResult(Status.OK, "");
// or
// result = new PluginResult(Status.ERROR);
return result;
}
...
public boolean isSynch(String action) {
return false; // always do async...
}
JavaScript:
$('#loading-screen').show();
var successCallback = function() {
console.log('Success Callback');
$('#loading-screen').hide();
};
var failureCallback = function() {
console.log('Failed Callback');
$('#loading-screen').hide();
};
PhoneGap.exec(successCallback, failureCallback, 'PluginName', 'actionName', data);
Из источника PhoneGap:
* Execute a PhoneGap command. It is up to the native side whether this action is synch or async.
* The native side can return:
* Synchronous: PluginResult object as a JSON string
* Asynchrounous: Empty string ""
* If async, the native side will PhoneGap.callbackSuccess or PhoneGap.callbackError,
* depending upon the result of the action.
Так что я подумал, что в этом случае эта строка неверна:
new PluginResult(Status.OK, "");
Примечание. Если wrap (JavaScript) PhoneGap.exec вызывает в setTimeout (например, с задержкой в 1 секунду), экран загрузки будет работать «правильно» (он все еще заморожен, но у пользователя есть мгновенная обратная связь), но это явно не так. решение.
Мне кажется, я просто не вижу здесь ничего очевидного, просто один параметр или что-то еще.
Спасибо.