android24小时后重试,android 网络请求失败后重试

接口  ILogicFlow

public interface ILogicFlow {

final int StatusInit = 0x01;

final int StatusStart = 0x02;

final int StatusSuccess = 0x03;

final int StatusFailed = 0x04;

final int StatusSuccessRetry = 0x05;

final int StatusFailedRetry = 0x06;

final int StatusTimeOut = 0x07;

void logicInit();

void logicStart();

void logicFailed();

void logicSuccess();

void logicFailedRetry();

void logicSuccessRetry();

void logicEnd();

}

SimpleAsyncHttpGetUtil 类

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import org.apache.http.HttpStatus;

import android.os.Handler;

import android.os.HandlerThread;

import android.os.Message;

public class SimpleAsyncHttpGetUtil implements ILogicFlow {

private HandlerThread ht;

private Handler h;

private CallBack callBack;

private CallBackData callBackData = new CallBackData();

public SimpleAsyncHttpGetUtil(String url, int failedMaxRetryCount, CallBack callBack) {

ht = new HandlerThread("http");

ht.start();

h = new Handler(ht.getLooper()) {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

callBackData.status = msg.what;

switch (msg.what) {

case StatusInit:

logicInit();

break;

case StatusStart:

logicStart();

break;

case StatusFailedRetry:

logicFailedRetry();

break;

case StatusFailed:

logicFailed();

break;

case StatusSuccess:

logicSuccess();

break;

default:

break;

}

}

};

this.callBack = callBack;

callBackData.url = url;

callBackData.failedMaxRetryCount = failedMaxRetryCount;

}

public void execute() {

h.sendEmptyMessage(StatusInit);

}

private boolean retry_start() {

boolean b = false;

HttpURLConnection httpConn = null;

try {

httpConn = (HttpURLConnection) new URL(

callBackData.url).openConnection();

httpConn.setConnectTimeout(5000);

httpConn.setReadTimeout(5000);

httpConn.connect();

int statusCode = httpConn.getResponseCode();

if (HttpStatus.SC_OK == statusCode) {

InputStream is = httpConn.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

String line;

StringBuffer lines = new StringBuffer();

while (null != (line = br.readLine())) {

lines.append(line);

}

br.close();

isr.close();

is.close();

callBackData.response = lines.toString();

b = true;

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally{

if(httpConn != null){

httpConn.disconnect();

}

}

return b;

}

public void setCallBack(CallBack callBack) {

this.callBack = callBack;

}

public int getStatus() {

return callBackData.status;

}

public static interface CallBack {

void onHttpInit(CallBackData cbd);

void onHttpStart(CallBackData cbd);

void onHttpFailedRetry(CallBackData cbd);

void onHttpFailed(CallBackData cbd);

void onHttpSuccess(CallBackData cbd);

}

public static class CallBackData {

public String url = new String();

public int status = StatusInit;

public int failedMaxRetryCount = 0;

public int failedRetryCount = 0;

public String response = new String();

public String toString() {

return String

.format("url=%s,status=%d,failedMaxRetryCount=%d,failedRetryCount=%d",

url, status, failedMaxRetryCount, failedRetryCount);

}

}

@Override

public void logicInit() {

if (null != callBack) {

callBack.onHttpInit(callBackData);

}

h.sendEmptyMessage(StatusStart);

}

@Override

public void logicStart() {

if (null != callBack) {

callBack.onHttpStart(callBackData);

}

if (retry_start()) {

h.sendEmptyMessage(StatusSuccess);

} else {

h.sendEmptyMessage(StatusFailedRetry);

}

}

@Override

public void logicFailed() {

if (null != callBack) {

callBack.onHttpFailed(callBackData);

}

logicEnd();

}

@Override

public void logicSuccess() {

if (null != callBack) {

callBack.onHttpSuccess(callBackData);

}

logicEnd();

}

@Override

public void logicFailedRetry() {

callBackData.failedRetryCount++;

if (callBackData.failedRetryCount <= callBackData.failedMaxRetryCount) {

if (null != callBack) {

callBack.onHttpFailedRetry(callBackData);

}

if (retry_start()) {

h.sendEmptyMessage(StatusSuccess);

} else {

h.sendEmptyMessage(StatusFailedRetry);

}

} else {

h.sendEmptyMessage(StatusFailed);

}

}

@Override

public void logicSuccessRetry() {

}

@Override

public void logicEnd() {

ht.quit();

ht = null;

h = null;

callBack = null;

callBackData = null;

}

}

用法

SimpleAsyncHttpGetUtil epgHttpUtil  = new SimpleAsyncHttpGetUtil(EPG_URL, 2, mEpgCallback); epgHttpUtil.execute();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值