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();
有问题请私信或评论哦。