记录多个请求状态

//可处理多个并发请求,每个网络请求都有以下4个状态,使用两位标记。我们传入的每个index表示一个网络请求。每个网络请求的Index可依次为0,2,4,6.....

public class LoadingState {
    public static final int STATE_INIT = 0;
    public static final int STATE_LOADING = 1;
    public static final int STATE_SUCCESS = 2;
    public static final int STATE_FAILD = 3;
    
    public static final int STATE_MASK = 3;
    
    public static int resetState(int loadingRecord,int index){
        loadingRecord = loadingRecord&(~(STATE_MASK<<index));
        return loadingRecord;
    }
    
    public static int startLoading(int loadingRecord,int index){
        loadingRecord = resetState(loadingRecord, index);
        loadingRecord = loadingRecord | (STATE_LOADING << index);
        return loadingRecord;
    }
    
    public static int loadFinished(int loadingRecord,int index,boolean flag){
        loadingRecord = resetState(loadingRecord, index);
        int result = flag ? STATE_SUCCESS :STATE_FAILD;
        loadingRecord = loadingRecord | (result << index);
        return loadingRecord;
    }
    
    public static int getLoadingState(int loadingRecord,int index){
        return (loadingRecord >> index) & STATE_MASK;
    }
    
    public static boolean isLoading(int loadingRecord){
        boolean result = false;
        for(int i =0;i<Integer.SIZE/2;i++){
            int loadingState = (loadingRecord>>(i*2)) & STATE_MASK;
            if(loadingState == STATE_INIT)
            {
                continue;
            }            
            result = loadingState == STATE_LOADING;
            if(result){
                break;
            }
        }
        return result;
    }
}

 

loadingRecord初始化为0,  A请求的index为0,B请求的index为2.

A请求发起的时候调用LoadingState.startLoading(loadingRecord,0);

B请求发起的时候调用LoadingState.startLoading(loadingRecord,2);

A请求完成的时候调用LoadingState.loadFinished(loadingRecord,0,true);

 

判断某个请求的状态,调用getLoadingState方法。

往往页面有多个请求,需要判断是否处于加载状态,调用isLoading方法,待所有请求都结束,再隐藏正在加载的提示,或进行后续流程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值