Okhttp 工具类

package bwie.mylibrary;

import com.google.gson.Gson;
import java.io.IOException;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

/**
 * Created by zjj on 2016/11/3.
 */

public class OkHttpUtils {

    private static OkHttpClient mClient;
    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

    //构造方法(无参)1.将构造函数私有化
    private OkHttpUtils() {
    }

    //单例模式:3.提供一个方法可以获取到改对象
    public static OkHttpClient getOkHttpClient() {
        //判断是否为空
        if (mClient == null) {
        //日志拦截器
            HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
            loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//实例化OkHttpClient 2.在类中创建一个本类的实例
            //对象是方法调用时才初始化,
            mClient = new OkHttpClient.Builder()
                    .addInterceptor(loggingInterceptor)
//                    .addInterceptor(new Interceptor() {
//                        @Override
//                        public Response intercept(Chain chain) throws IOException {
//                            Request request = chain.request();
//                            request = request.newBuilder()
//                                    .addHeader("key","value")
//                                    .build();
//                            return chain.proceed(request);
//                        }
//                    })
                    .build();
        }
        return mClient;
    }

    /**
     * 异步post  参数为对象
     *
     * @param url
     * @param obj
     * @param callback
     */
    public static void post(String url, Object obj, Callback callback) {
        post(url, new Gson().toJson(obj), callback);
    }

    /**
     * 异步post  参数为json
     *
     * @param url
     * @param json
     * @param callback
     */
    public static void post(String url, String json, Callback callback) {
        //创建RequestBody create()方法 参数一:MediaType contenttype 参数二:String content
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        getOkHttpClient().newCall(request).enqueue(callback);
    }

    /**
     * 异步post 参数为Map
     *
     * @param url
     * @param map
     * @param callback
     */
    public static void post(String url, Map<String, String> map, Callback callback) {
        //获取FormBody.Builder对象
        FormBody.Builder builder = new FormBody.Builder();
        //添加要传递的参数
        for (String key : map.keySet())
            builder.add(key, map.get(key));
//获取RequestBody
        RequestBody body = builder.build();
//获取Request
        Request request = new Request.Builder()
                .url(url)//网址
                .post(body)//参数
                .build();
        //获取Call对象,调enqueue(callback)方法
        getOkHttpClient().newCall(request).enqueue(callback);
    }


    /**
     * 异步get   enqueue(callback)
     *
     * @param url
     * @param callback
     */
    public static void get(String url, Callback callback) {
//创建Request对象
        Request request = new Request.Builder()
                .url(url)
                .build();
        //Call对象的enqueue(callback)方法
        getOkHttpClient().newCall(request).enqueue(callback);

    }

    /**
     * 同步get  execute()
     *
     * @param url
     * @return
     */
    public static String get(String url) {
//创建Request对象
        Request request = new Request.Builder()
                .url(url)
                .build();
        try {
            //创建Call对象
            Call call = getOkHttpClient().newCall(request);
            //获得Response对象Call对象的execute()方法
            Response response = call.execute();
//如果响应成功,将响应结果返回出去
            if (response.isSuccessful()) {
                return response.body().string();
            } else {
                return null;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值