失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android-网络请求封装类-okhttp

Android-网络请求封装类-okhttp

时间:2019-02-28 01:14:12

相关推荐

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() {@Overridepublic void onFailure(Call call, IOException e) {// 网络请求失败}@Overridepublic 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. 调用部分:

【注意:在Android4.0以后,在主线程中的HTTP请求,运行时都会报错 ANRs(“Application Not Responding”),”应用没有响应“。所以需要进行网络请求的时候 还是需要开辟一个子线程,然后等到数据返回成功后再切换为主线程来刷新UI。】

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

如果觉得《Android-网络请求封装类-okhttp》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。