您的当前位置:首页正文

Android 彭于晏 利用OKHTTP搭建简易网络框架

来源:东饰资讯网

        在项目开发中常常需要用到网络,好的网络框架可以帮我们节省很多时间,今天我们就来搭建一个简单的拓展性高的网络框架。

       1. 首先我们定义一个类作为网络接口类:

网络请求监听

2. 新建一个网络请求管理类,在这个类里面搭建我们的网络请求框架,首先新建刚才的接口实例,以及一个handler 用来传递数据。

请求管理类

3. 创建结构体,传入接口:

在这里,说一下looper.getmainLooper():

如果你不带参数的实例化:Handler handler = new Handler();那么这个会默认用当前线程的looper

一般而言,如果你的Handler是要来刷新操作UI的,那么就需要在主线程下跑。

情况:

1).要刷新UI,handler要用到主线程的looper。那么在主线程 Handler handler = new Handler();,如果在其他线程,也要满足这个功能的话,要Handler handler = new Handler(Looper.getMainLooper());

2).不用刷新ui,只是处理消息。 当前线程如果是主线程的话,Handler handler = new Handler();不是主线程的话,Looper.prepare(); Handler handler = new Handler();Looper.loop();或者Handler handler = new Handler(Looper.getMainLooper());

若是实例化的时候用Looper.getMainLooper()就表示放到主UI线程去处理。

如果不是的话,因为只有UI线程默认Loop.prepare();Loop.loop();过,其他线程需要手动调用这两个,否则会报错。

然后利用OKHTTP请求数据:

public void sendPost(Map params) {

OkHttpClient okHttpClient =new OkHttpClient();

    if (params ==null) {

params =new HashMap<>();

    }

    FormBody.Builder formBody =new FormBody.Builder();//创建表单请求体

    for (Map.Entry map : params.entrySet()) {

String key = map.getKey();

        String value;

        /**

        * 判断值是否是空的

        */

        if (map.getValue() ==null) {

value ="";

        }else {

value = map.getValue();

        }

/**

        * 把key和value添加到formbody中

        */

        formBody.add(key, value);

    }

Request request =new Request.Builder()

.url(url)

.post(formBody.build())

.build();

    okHttpClient.newCall(request).enqueue(new Callback() {

@Override

        public void onFailure(Call call, IOException e) {

final String err = e.toString();

            mhandler.post(new Runnable() {

@Override

                public void run() {

                }

});

        }

@Override

        public void onResponse(Call call, Response response)throws IOException {

String resp = response.body().string();

            try {

final JSONObject jsonObject =new JSONObject(resp);

                final String msg = jsonObject.get("msg").toString();

                final String code = jsonObject.get("code").toString();

                final String data = jsonObject.getJSONObject("data").toString();

                if ("0".endsWith(code)) {

mhandler.post(new Runnable() {

@Override

                        public void run() {

try {

icallback.success(data);

                            }catch (JSONException e) {

e.printStackTrace();

                            }

}

});

                }else {

mhandler.post(new Runnable() {

@Override

                        public void run() {

icallback.reqError(code, msg);

                        }

});

                }

}catch (JSONException e) {

e.printStackTrace();

                icallback.reqError("", "json解析异常");

            }

}

});

}


初始化请求接口:

请求数据,并执行回调:

至此,完成简易网络请求框架的搭建~~

显示全文