封装OkHttpUtils使用类,doGet,doPost方法

封装OkHttpUtils使用类,doGet,doPost方法


依赖

compile 'com.squareup.okhttp3:okhttp:3.9.1'

权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

接口OnFinishListener

public interface OnFinishListener {
    void onFailed(String msg);
    void onSuccess(Object obj);
}

封装的OkHttpUtils


public class OkHttpUtils {
    private static Handler handler=new Handler();
    //单例模式
    private static OkHttpUtils OK_HTTP_UTILS=null;

    /**
     * 得到OkHttpUtils实例对象
     *
     * @return
     */
private OkHttpUtils(){}
    public static OkHttpUtils getInstance(){
        if(null==OK_HTTP_UTILS){
            synchronized (OkHttpUtils.class){
                if(null==OK_HTTP_UTILS){
                    OK_HTTP_UTILS=new OkHttpUtils();
                }
            }
        }
       return OK_HTTP_UTILS;
    }

    /**
     * Get请求
     * @param onFinishListener
     */

    public void doGet(String path, Map<String,String> map,final OnFinishListener onFinishListener){
        StringBuffer sb = new StringBuffer();
        sb.append(path);
        //判断path是否包含一个
        if(sb.indexOf("?")!=-1){
            //判断"?"是否在最后一个
            if(sb.indexOf("?")!=sb.length()-1){
                sb.append("&");
            }

        }else{
            sb.append("?");
        }
        //遍历map集合中所有请求参数
        for(Map.Entry<String, String> entry:map.entrySet()){
            sb.append(entry.getKey())
                    .append("=")
                    .append(entry.getValue())
                    .append("&");
        }

        if(sb.lastIndexOf("&")!=-1){
            sb.deleteCharAt(sb.length()-1);
        }

        OkHttpClient okHttpClient=new OkHttpClient();
        //构建请求项
        Request request=new Request.Builder()
                .get()
                .url(sb.toString())
                .build();
        Call call =okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                //请求失败
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onFinishListener.onFailed(e.getMessage());

                    }
                });

            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                    if(response.isSuccessful()){
                        //得到服务器的响应结果
                        final String result = response.body().string();
                        //请求成功
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                //主线程当中执行
                                onFinishListener.onSuccess(result);
                            }
                        });

                    }
            }
        });


    }
    /**
     * post请求
     *
     * @param path
     * @param map
     * @param onFinishListener
     */

    public void doPost(String path,Map<String,String> map,final OnFinishListener onFinishListener){
        OkHttpClient okHttpClient=new OkHttpClient();
        //构建参数的对象
        FormBody.Builder builder = new FormBody.Builder();
        //遍历map集合,获取用户的key/value
        for(String key:map.keySet()){
            builder.add(key,map.get(key));
        }
        //构建请求项
        Request request=new Request.Builder()
                .post(builder.build())
                .url(path)
                .build();
        Call call = okHttpClient.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                       onFinishListener.onFailed(e.getMessage());
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(response.isSuccessful()){
                    final String result = response.body().string();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            onFinishListener.onSuccess(result);
                        }
                    });

                }
            }
        });
    }

}

调用MainActivity

public class MainActivity extends AppCompatActivity implements OnFinishListener{

    private OkHttpUtils okHttpUtils;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        okHttpUtils = OkHttpUtils.getInstance();
    }

    public void btnForGet(View view){
        Map<String,String> params=new HashMap<>();
        params.put("mobile","15011445154");
        params.put("password","123456");
        okHttpUtils.doGet("https://www.zhaoapi.cn/user/login",params,this);
    }

    public void btnForPost(View view){
        Map<String,String> params=new HashMap<>();
        params.put("mobile","15011445154");
        params.put("password","123456");
        okHttpUtils.doPost("https://www.zhaoapi.cn/user/login",params,this);
    }

    @Override
    public void onFailed(String msg) {
        System.out.println("MainActivity : "+msg+" 线程名 : "+Thread.currentThread().getName());
    }

    @Override
    public void onSuccess(Object obj) {
        System.out.println("MainActivity : "+obj.toString()+"\n 线程名 : "+Thread.currentThread().getName());

    }
}

布局activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical" >

    <Button
        android:onClick="btnForGet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="使用封装的OkHttp类进行GET请求"/>

    <Button
        android:onClick="btnForPost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="使用封装的OkHttp类进行Post请求"/>

</LinearLayout>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值