问题是如何通过Android手机与服务器进行通信,以便在离开Activity并且Activity中的调用不成功时自动再次重复事务。刚才我使用Android的AsyncTask与服务器通信:
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 中。到目前为止,我向用户显示了一条错误消息,他负责通过按钮再次将结果提交给服务器。我正在寻找的是一些在内存中保持持久性的 Activity,它会在未进行传输的情况下稍后运行。
作为一个应用案例,如果我按下该航点,我会使用它来动态上传地图中航点的图片。在某些情况下,移动服务提供商的连接可能不可用(山脉、森林、远离天线)。然后我想离开地图Activity,切换到这个航点的详细视图。在成功案例中,我将图片放入我的模型类并进行序列化。如果用户再次单击同一航点,则不会再次加载图片。在不成功的情况下,我不想等待用户点击航路点来检索图像。事实上,我需要一个后台任务,某种队列,已经访问过的航路点的图片不能' 检索到的 t 被加载,直到通信部分返回一个肯定的结果并且图像可以写入模型中。下一次用户按下 Waypoint 时,图片就会出现。
是否有进行此类代码实现的最佳实践?周围有例子吗?有没有更好的方法来做到这一点?