okHttp的简单封装

 工具类:

 
import android.os.Handler;
import android.os.Looper;
import java.io.IOException;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
 
public class OkHttpUtils {
    private static OkHttpClient client;
    private static OkHttpUtils okHttpUtils;
    private Handler handler;
 
    private OkHttpUtils() {
        client = new OkHttpClient();
        handler = new Handler(Looper.getMainLooper());
    }
 
    /*单例模式  获取类实例*/
    private static OkHttpUtils getInstance() {
        if (okHttpUtils == null) {
            synchronized (OkHttpClient.class) {
                okHttpUtils = new OkHttpUtils();
            }
        }
        return okHttpUtils;
    }
 
 
    public static void doPost(String url,Map<String, String> param, String headerName, String header, final MyCallback callback){
        getInstance().inner_doPost(url,param,headerName,header,callback);
    }
 
 
    /*内部方法 网络请求
    * */
    private void inner_doPost(String url, Map<String, String> param, String headerName, String header, final MyCallback callback) {
        final Request request;
        Request.Builder requestBuilder = new Request.Builder();
 
        /*判断是否有请求体*/
        if (param != null) {
            FormBody.Builder builder = new FormBody.Builder();
            for (Map.Entry<String, String> map : param.entrySet()) {
                String key = map.getKey();
                String value;
                if (map.getValue() == null) {
                    value = "";
                } else {
                    value = map.getValue();
                }
                builder.add(key, value);
            }
 
            RequestBody requestBody = builder.build();
            requestBuilder.post(requestBody);
        }
 
 
        /*判断是否有头部信息
        *
        * 这里由于这一个项目的要求头部信息不多,我只用了很简单的一个写法
        * 需要更多信息的可以使用Headers进行扩展
        * */
        if (header != null) {
            requestBuilder.addHeader(headerName, header);
        }
 
        request = requestBuilder
                .url(url)
                .build();
 
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                deliverRequestFailure(e,callback);
            }
 
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                deliverRequestSuccess(response,callback);
 
            }
        });
    }
 
 
    /*请求失败时回调*/
    private void deliverRequestFailure(final IOException e, final MyCallback callback){
        handler.post(new Runnable() {
            @Override
            public void run() {
                if (callback!=null)
                    callback.onFailure(e);
            }
        });
    }
 
    /*请求成功时回调*/
    private void deliverRequestSuccess(final Response response, final MyCallback callback){
        handler.post(new Runnable() {
            @Override
            public void run() {
                if (callback!=null) {
                    try {
                        callback.onResponse(response);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
 
    /*
    * 外部回调*/
    public interface MyCallback {
        void onResponse(Response response) throws IOException;
        void onFailure(IOException e);
    }
}

 

使用

  Map<String,String> param=new HashMap<>();
            param.put("phone",user);
            param.put("password",password);
            String url="http://www.xhban.com:8080/photograph_u/user/login";
            OkHttpUtils.doPost(url, param, null, null, new OkHttpUtils.MyCallback() {
                @Override
                public void onResponse(Response response) throws IOException {
                   //请求成功的数据处理
                }
 
                @Override
                public void onFailure(IOException e) {
                    Log.e(TAG, "onFailure: ",e );
                }
            });

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值