简单使用Okhttp和Gson的封装(Post请求)

在使用Okhttp时要很多代码觉得麻烦,就写一个封装类,这样以后也好使用

Okhttp

1.按照正常步骤使用Okhttp的话(以Post请求为例)

//创建okhttp端口
OkHttpClient okHttpClient = new OkHttpClient();
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
//传参
JSONObject Json = new JSONObject();
/*
当然也可以这样传参
JSONObject jsonObject = new JSONObject();
           jsonObject.put("xx",x);
           jsonObject.put("xx","xx");
           String json = jsonObject.toString();
*/
String json = "这里传入json串";
//请求服务器的地址
String url = "写自己的请求地址";
//Post请求
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
                      .url(url)
                      .post(body)
                      .build();
Call call = okHttpClient.newCall(request);
//CallBack是请求回调
call.enqueue(new Callback() {
    @Override
    //请求失败执行的方法
    public void onFailure(Call call, IOException e) {
   //可以打印错误信息
    }

    @Override
    //请求成功执行的方法
    public void onResponse(Call call, Response response) throws IOException {
    
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
               //可以处理UI(推荐使用Handler,简单现实倒是无所谓了)
            }
        });
    }
});

是不是很麻烦,如果每次要用代码太多,所以就写一个封装类方便自己使用
2.Okhttp的封装

public class Okhttp {
 private static Okhttp netokhttp;
    public final OkHttpClient client;
    private Okhttp(){
        client = initOkHttpClient();
    }
    /*
    * 1、创建OkHttpClient对象并初始化的封装。
     在整个项目中我们只需要一个OkHttpClient对象,
     * 不同的网络请求只需要创建不同的Requset对象和Call对象。
    * */
    private OkHttpClient initOkHttpClient(){
        //初始化的时候可以自定义一些参数
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .readTimeout(2000, TimeUnit.MILLISECONDS)//设置读取超时为2秒
                .connectTimeout(3000, TimeUnit.MILLISECONDS)//设置链接超时为3秒
                .build();
        return okHttpClient;
    }
    /*当第一次使用Okhttp类时,
    Okhttp的对象被创建,并且始终只有一个实例,
    okHttpClient作为Okhttp对象的成员变量,
    也只有一个实例*/
    public static Okhttp postNetokhttp(){
        if(netokhttp == null){
            netokhttp = new Okhttp();
        }
        return netokhttp;
    }
    /*2.发送网络请求的封装
    每次执行网络访问的方法一样
    传入的参数不一样
    可以修改自己想传入的参数类型
*/
//使用方法
//Okhttp.postNetokhttp().callNet(url, json, new Callback(){....});就可以发起网络请求了
public void callNet(String url,String json,Callback callback){
         MediaType JSON = MediaType.parse("application/json; charset=utf-8");
         RequestBody body = RequestBody.create(JSON, json);
         Request request = new Request.Builder()
                 .url(url)
                 .post(body)
                 .build();
         Call call = postNetokhttp().initOkHttpClient().newCall(request);
         call.enqueue(callback);
    }
}

这是使用封装后的样子

private void initPost(){
        String url ="使用自己的连接";
        String json = "json串";
        Okhttp.postNetokhttp().callNet(url, json, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
             //可以返回异常信息
            }

            @Override
            //成功时候调用
            public void onResponse(Call call, Response response) throws IOException {
               //可以做UI以及Gson解析
            }
        });
    }

瞬间就舒服了很多,不用那么长的代码了

Gson

1.使用Gson首先就要写一个实体类
实体类里面对应自己需要来写然后实现
有参无参构造方法
get和set方法
toString方法
就好了
2.Gson的使用
结合上文Okhttp的封装使用

 private void initPost(){
        String url ="写自己的连接地址";
        String json = "json串";
        Okhttp.postNetokhttp().callNet(url, json, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String res = response.body().string();
                //实例化Gson
                Gson gson = new Gson();
                //MyGson就是我自己创建的实体类
                final MyGson myGson = gson.fromJson(res, MyGson.class);
                //这里就获取到我想解析的内容了
                Log.e("测试", String.valueOf(myGson.getStatus()));
            }
        });
    }

这就完成了简单使用Okhttp和Gson
谢谢看到这里,Android萌新,有问题望大佬指出。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值