美文网首页
OkHttp学习心得

OkHttp学习心得

作者: 九乡河的小香瓜 | 来源:发表于2017-06-13 15:17 被阅读0次

    在大作业中需要网络连接从服务器得到数据,上网学习后发现Android有4种网络连接方式HttpClient、HttpURLConnection、OKHttp和Volley。经过比较后,我觉得使用OKHttp,下面是我的学习心得.

    1. GET

    在OKHttp,每次网络请求就是一个Request,我们在Request里填写我们需要的url,header等其他参数,再通过Request构造出Call,Call内部去请求参数,得到回复,并将结果告诉调用者。

    Request request = new Request.Builder()

    .url(url)

    .build();

    Response response = client.newCall(request).execute();

    我们通过Request.Builder传入url,然后直接execute执行得到Response,通过Response可以得到code,message等信息。

    这个是通过同步的方式去操作网络请求,而android本身是不允许在UI线程做网络请求操作的,因此我们需要自己开启一个线程。

    当然,OKHttp也支持异步线程并且有回调返回,有了上面同步的基础,异步只要稍加改动即可。

    private void enqueue(){

    Request request = new Request.Builder()

    .url(url)

    .build();

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

    @Override

    public void onFailure(Request request, IOException e) {

    }

    // 成功时响应的回调函数

    @Override

    public void onResponse(Response response) throws IOException {

    //NOT UI Thread

    if(response.isSuccessful()){

    System.out.println(response.code());

    System.out.println(response.body().string());

    }

    }

    });

    }

    就是在同步的基础上讲execute改成enqueue,并且传入回调接口,但接口回调回来的代码是在非UI线程的,因此如果有更新UI的操作记得用Handler或者其他方式。

    2、POST

    说完GET该介绍些如何使用POST,POST情况下我们一般需要传入参数,甚至一些header,传入参数或者header

    Request request = new Request.Builder()

    .url("https://api.github.com/repos/square/okhttp/issues")

    .header("User-Agent", "OkHttp Headers.java")

    .addHeader("Accept", "application/json; q=0.5")

    .addHeader("Accept", "application/vnd.github.v3+json")

    .build();

    传入POST参数

    RequestBody formBody = new FormEncodingBuilder()

    .add("platform", "android")

    .add("name", "bug")

    .add("subject", "XXXXXXXXXXXXXXX")

    .build();

    Request request = new Request.Builder()

    .url(url)

    .post(body)

    .build();

    Response response = client.newCall(request).execute();

    if (response.isSuccessful()) {

    return response.body().string();

    } else {

    throw new IOException("Unexpected code " + response);

    }

    这个代码是同步网络请求,异步就改成enqueue就行了。

    另外,我在作业中还遇到了一个问题

    当我想给textview设置值的时候会报错

    sId.setText(student.getNumber());

    查阅资料后发现textview不能直接给他int值

    sId.setText(student.getNumber()+"");

    这样写就不会报错了

    参考资料 http://square.github.io/okhttp/


    相关文章

      网友评论

          本文标题:OkHttp学习心得

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