错误后处理android服务器通信

时间:2014-08-07 14:34:14

标签: java android android-service communication

我的Android应用程序正在使用http连接将数据发送到服务器。如果服务器收到数据,则应用程序会将数据标记为在其自己的数据库中成功传输。

有时可能会出现外部问题,导致传输无法完成。该应用应尝试稍后再次发送数据。

有什么可能确保数据到达服务器?我只能想到一项服务,它定期检查未传输的数据,但我不喜欢这种方法。

1 个答案:

答案 0 :(得分:0)

下载了一些伪代码..

1.创建AcknowledgementManager,等待每个请求的确认。

2.确认管理员发布一个可在TIME_OUT间隔后运行的可运行的。

    public void startListeningForTimeOut(CallContext callContext) {
    TimeOutRunnable timeOutRunnable = new TimeOutRunnable(callContext);
    mMapRunnables.put(callContext, timeOutRunnable);
    mHandler.postDelayed(timeOutRunnable, TIMEOUT_DURATION);
    Slog.d(TAG,
            "started listening for timeout for token: " + callContext + " at: "
                    + System.currentTimeMillis());
}

3.1如果AcknowledgementManager收到数据确认,它将取消该数据的可运行并在数据库中进行必要的更新。

    public void stopListeningForTimeOut(CallContext callContext) {
    mHandler.removeCallbacks(mMapRunnables.get(callContext));
    mMapRunnables.remove(callContext);
    Slog.d(TAG,
            "stopped listening for timeout for token: " + callContext + " at: "
                    + System.currentTimeMillis());
}

3.2如果没有收到确认,则runnable会提出"超时"到AcknowledgementManager.AcknowledgementManager重试发送数据。

  public class TimeOutRunnable implements Runnable {
    private static final String TAG = "TimeOutThread rupesh";

    CallContext mToken;

    // String mCallback;

    public TimeOutRunnable(CallContext callContext) {
        mToken = callContext;
        // mCallback = callbackTBD;
        // FIXME send proper callback class
    }

    @Override
    public void run() {
        Slog.d(TAG, "timeout occured for data id: " + mToken + " at: " + System.currentTimeMillis());
        mToken.onTimeOutOccurred();
    }

}

请注意:

1.在同步数据之前,请在db中输入数据,以便在重新启动应用程序之间不会丢失数据。

2.在启动同步过程之前,查询数据库以获取未传输的数据。根据数据大小,确保将数据保存在内存中以避免每次都访问数据库。

3.一旦收到数据项的确认,请对db中的该条目进行必要的更改。

4.您也可以重试' db中的标志,以便您跟踪重试次数。