网络get/post请求异步同步请求回调

教你怎么写网络异步同步请求回调

最近需要用到请求网络数据,在网上一直查找,都找不到,要么是说的不明白,之后我自己动手来实现了。

网络回调,分为同步和异步,多数情况都会用异步,但是也有情况用到同步的。

无论同步异步,都必须要在子线程中去加载。

首先写一个写一个网络请求接口。

同步网络请求这里就说了,同步就是一直等待,等待他完成为止(有无结果)

异步请求的回调才是我们要学习的重点

比较有规范的通用回调接口

class ResultCallback:
public interface ResultCallback {

     void getReslt(String result);
}

请求网络的接口

public class SongsProtocol extends BaseProtocol {
public static void parse(String id, ResultCallback callback) {
    final RequestParams params = new RequestParams(HttpUrl.MUSICIANS_SONGS + id + "?type=yc|fc|bz&page="
            + SongsAdapter.page);
    resultCallback = callback;//实例化
------------------------------------------------------------------------
    x.http().get(params, new Callback.CommonCallback<String>() {
        Message message = new Message();
        @Override
        public void onSuccess(String result) {
            message.what = 0;

            message.obj = result;
            myHandler.sendMessage(message);
        }

        @Override
        public void onError(Throwable ex, boolean isOnCallback) {
            message.what = 1;
            myHandler.sendMessage(message);
            MyToast.show("加载错误,请稍后重试");
        }
        @Override
        public void onCancelled(Callback.CancelledException cex) {
            MyToast.show("加载取消,请稍后重试");
        }
        @Override
        public void onFinished() {
        }
    });
    //注意虚线之间的,我这里用xutils 3.0 这个是异步的,或者其他框架。当然你也可以用JAVA那个
--------------------------------------------------------------------------
}
public  static Handler myHandler = new Handler() {
    @Override
    public void handleMessage(android.os.Message msg) {

        if (msg.what == 1) {
            resultCallback.getReslt("");
        } else if (msg.what == 0) {
            String result = (String) msg.obj;
            resultCallback.getReslt(result);
        }
    }

    ;
};
//声明抽象接口的变量
static ResultCallback resultCallback = new ResultCallback() {

        @Override
        public void getReslt(String result) {
            // TODO Auto-generated method stub
        }
    };
}

在Activity中调用。

声明 callback
ResultCallback callback = new ResultCallback() {
    @Override
    public void getReslt(String result) {
        if (result.isEmpty()) {
            return;
        }
        Gson gson = new Gson();
        MusiciansSongs bean = gson.fromJson(result, MusiciansSongs.class);
        if ("200".equals(bean.getCode())) {
            datas = bean.getData().getList();
            if (bean.getData().getList().size() != 0) {
                datas = bean.getData().getList();
                SongsAdapter.page++;
                LogUtils.e("songs protocol" + datas.toString());

            } else {
                Toast.show("没有更多数据");
            }

        } else {
            Toast.show("请稍后重试");
        }
    }
};
//调用 
SongsProtocol.parse(id, callback);

速度非常快,毫无有延迟现象,这样子的难题又被解决了,当然这些代码还可以优雅一点,实现代码的复用。才是砸门追求的。

很简单是吧,也没有要说声明,相信大家都可以看懂。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值