OkHttp get和post封装

来源:互联网 发布:php 判断上传文件大小 编辑:程序博客网 时间:2024/05/08 17:25

最近需要大量的解析我就把最近最好的OkHttp还有Gson写到了一起,话不多说直接代码了

public class OkHttpUtils {    //第一个Post请求 异步方法    // 1:首先定义一个接口    public interface GetEntityCallBack{        // 2:定义一个或多个抽象方法        void getEntity(Object obj);    }    // 声明一个全局变量    public static  GetEntityCallBack callBack;    //3:再本类中定义一个接口实例(只是定义,而不是创建):目的是接受调用者传过来的接口    public static  void setGetEntityCallBack(GetEntityCallBack callBack1){        // GetEntityCallBack变成全局变量        callBack=callBack1;    }    // Type类型封装的  也可以把type改成Class 下面的参数也是class    public static void post(final Context context , Map<String,String > map, String path, final Class cla){        OkHttpClient client = new OkHttpClient();        FormBody.Builder builder = new FormBody.Builder();        //        Set<Map.Entry<String, String>> entries = map.entrySet();        for (Map.Entry<String ,String> e:entries){            //            builder.add(e.getKey(),e.getValue());        }        FormBody body = builder.build();        final Request request = new Request.Builder()                .url(path)                .post(body)                .build();        Call call = client.newCall(request);        // 接口回调 这个属于异步方法        call.enqueue(new Callback() {            // 失败的时候            @Override            public void onFailure(Call call, IOException e) {              //  Toast.makeText(context, "下载失败,检查网络", Toast.LENGTH_SHORT).show();                System.out.println("下载失败,检查网络");            }            // 成功的时候            @Override            public void onResponse(Call call, Response response) throws IOException {                if (response.isSuccessful()){                    // 将响应踢转化成字符串类型                    String json = response.body().string();                    Gson gson = new Gson();                    // 把解析出来的数据 放到接口中                    Object o = gson.fromJson(json,cla);                    // 接口回调:把这个接口方法放到你想要放到地方                    callBack.getEntity(o);                    Log.e(TAG, "onResponse: 回调" );                }            }        });    }    // 第二个Post请求  同步方法    private static Object o1;    public static Object postTwo(final String path , Context context , final Class cla ){       new Thread(new Runnable() {           @Override           public void run() {               OkHttpClient client = new OkHttpClient();               FormBody.Builder builder = new FormBody.Builder();               FormBody body = builder.build();               Request request = new Request.Builder()                       .url(path)                       .post(body)                       .build();               Call call = client.newCall(request);               try {                   Response response = call.execute();                   int code = response.code();                   if (code == 200 ){                       // 将响应踢转化成字符串类型                       String json = response.body().string();                       Gson gson = new Gson();                       o1 = gson.fromJson(json,cla);                   }               } catch (IOException e) {                   e.printStackTrace();               }           }           //启动线程       }).start();        return o1;    }    // Get请求 同步方法    public static Object get(String path , Context context){        OkHttpClient client = new OkHttpClient();        Request request = new Request.Builder()                .url(path)                .build();        Call call = client.newCall(request);        try {            Response response = call.execute();            int code = response.code();            if (code == 200){                // 得到响应体                ResponseBody body = response.body();                byte[] bytes = body.bytes();                Bitmap bitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.length);                Handler handler = new Handler();                handler.post(new Runnable() {                    @Override                    public void run() {                        // 控件.setImageBitmap(bitmap);                    }                });            }else{                Toast.makeText(context, "请求网络失败,请连接网络", Toast.LENGTH_SHORT).show();            }        } catch (IOException e) {            e.printStackTrace();        }        return null;    }     // Get请求 异步方法    public static void getTwo(final String path, final Context context, final Class cla){        OkHttpClient client = new OkHttpClient();        final Request  request = new Request.Builder()                .url(path)                .get()                .build();        Call call = client.newCall(request);        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Toast.makeText(context , "请求网络失败,请检查网络", Toast.LENGTH_SHORT).show();            }            @Override            public void onResponse(Call call, Response response) throws IOException {                if (response.isSuccessful()){                    String json = response.body().string();                    Gson gson = new Gson();                    Object o = gson.fromJson(json, cla);                    callBack.getEntity(o);                }            }        });    }}

我相信注释已经很明白了,希望对你有所帮助

1 0
原创粉丝点击