> 文档中心 > Android网络请求封装-okhttp

Android网络请求封装-okhttp

一些友友们写 安卓的时候,都会 用到网络请求,有时候一个java文件就需要用到多次,每次请求的代码重复型较高,就可以考虑到将请求代码封装起来,下面是本人封装的请求代码,亲测有效!效果俱佳!

1.        ·创建一个空白的java类,编写下段代码:

import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class MyOkhttp {    private String ResponseData = null;    private boolean aBoolean = false;    public String sendRequest(Request request)    { OkHttpClient client = new OkHttpClient(); Call call = client.newCall(request); call.enqueue(new Callback() {     @Override     public void onFailure(Call call, IOException e) {  // 网络请求失败     }     @Override     public void onResponse(Call call, Response response) throws IOException {   // 网络请求成功  String data = response.body().string();  ResponseData = data;  aBoolean = true;  // 因为这种写法是异步请求,所以需要判断一下是否取到数据     } }); // 加个循环卡住当前线程,直到取到数据 while (true) {     if (aBoolean)  return ResponseData;   // 返回数据     else     {  // 我没加这段代码前,总是会有取不到数据,前前后后看代码都没有发现毛病,加上这个后就可以了,迷,估计是一些小毛病吧,速度太快给个缓冲,不影响效率。  try {      Thread.sleep(1);  } catch (InterruptedException e) {      e.printStackTrace();  }     } }    }}

2.        调用部分: 

new Thread(()->{  //加个子线程     MyOkhttp myOkhttp = new MyOkhttp();  // 创建上面的封装对象     Request request = new Request.Builder()  .url("网络地址")      .build();     String data = myOkhttp.sendRequest(request);  // 获取相应数据     ......//加下来就是对获取到的数据解析了,注意,对UI进行更改需要切换为主线程,不然会报错。我诺列两种方法切换主线程:1.     runOnUiThread(()->{     // UI更改代码  });2.写一个全局变量:private Handler handler = new Handler();  然后:    handler.post(()->{    // UI更改代码  });  }).start();

有问题请私信或评论哦。