Вопрос заключается в том, как связаться с телефоном Android на сервере, чтобы, если действие осталось, а вызов в Activity не был успешным, повторить транзакцию один раз снова автоматически. Только сейчас я использую AsyncTask Андроида для связи с сервером:Где разместить код Android для связи с сервером по http:
new AsyncTask<String, Void, List<String>>() {
@Override
protected void onPreExecute(
showWaitDialog();
}
@Override
protected void onPostExecute(List<String> msgList) {
//here I put the handling after the POST ie. error and success handling
hideWaitDialog();
if (msgList.isEmpty() {
//success handling --> starting an new Activity
} else {
errorView.setText (...);
errorLayout.setVisibility (View.VISIBLE);
}
}
@Override
protected List<String> doInBackground(String... params) {
List<String> msgs = new ArrayList<String>();
try{
//for example submitting an JSONObject
JSONObject result = HttpUtils.sendHttpPost(
AppConstants.WEB_URL, jsonObject);
//error handling on the result
boolean hasErrors = JsonResult.isOk(result);
if (hasErrors) {
// adding errors to msgs list
String[] errorMessages = JsonResult.getErrorMessages (result,...);
fillList (msgs, errorMessages);
return msgs;
}
} catch (CommunicationError er) {
msgs.add (er...);
}
return msgs;
}
}
Проблема с этим подходом в том, что если у меня нет успешной передачи данных я должен оставаться в одной и той же деятельности. До сих пор я показываю сообщение об ошибке пользователю, и он отвечает за отправку с помощью кнопки снова результатов на сервер. Что я ищу - это некоторая активность, которая остается постоянной в памяти, которая запускается позже в случае, когда передача не была выполнена.
В качестве приложения я использую это для динамической загрузки изображений для путевой точки на карте, если я нажал эту путевую точку. В некоторых случаях может случиться так, что соединение с поставщиком мобильной связи недоступно (горы, лес, далеко от антенны). Затем я хочу покинуть карту Activity и перейти к подробному представлению этой путевой точки. В случае успеха я помещал изображение в свои классы моделей и делал сериализацию. Если пользователь снова нажимает на ту же путевую точку, изображение снова не загружается. В случае отсутствия успеха я не хочу ждать, когда пользователь нажимает на путевую точку, чтобы получить изображение. На самом деле мне нужна фоновая задача, какая-то очередь, в которую загруженные снимки путевых точек, которые уже были посещены, не могут быть загружены до тех пор, пока часть связи не вернет положительный результат, и изображение может быть записано в модель. В следующий раз, когда пользователь нажимает «Путевую точку», изображение будет присутствовать.
Есть ли какие-либо передовые методы для реализации такого кода? Есть ли какой-нибудь пример? Есть ли лучший способ сделать это?
Храните данные в некоторых переменных, и когда ваша деятельность будет восстановлена, то есть внутри метода onResume вашей деятельности. Установите эти данные в представления. –