美文网首页
Android 彭于晏 利用OKHTTP搭建简易网络框架

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

作者: JackDaddy | 来源:发表于2018-05-23 11:12 被阅读13次

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

           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<>();

        }

    //String url = "http://10.205.17.158:8888/msspApi/api/deliver/dspace/material/appreq.json";

        String url ="http://112.74.163.95:8870/msspApi/api/deliver/dspace/material/appreq.json";

        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() {

    icallback.netError(err);

                    }

    });

            }

    @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解析异常");

                }

    }

    });

    }


    初始化请求接口:

    请求数据,并执行回调:

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

    相关文章

      网友评论

          本文标题:Android 彭于晏 利用OKHTTP搭建简易网络框架

          本文链接:https://www.haomeiwen.com/subject/zknljftx.html