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.        调用部分: 

【注意:在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();
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子哈哈哈~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值