OKhttp解析

    xiaoxiao2021-03-26  56

    public class OkHttpUtils {     private static OkHttpUtils okHttpUtils;     private final Gson gson;     private final Handler handler;     private final OkHttpClient okHttpClient;     OkHttpUtils() {         gson = new Gson();         handler = new Handler(Looper.getMainLooper());         okHttpClient = new OkHttpClient();     }     public static OkHttpUtils getInstance() {         if (okHttpUtils == null) {             synchronized (OkHttpUtils.class) {                 if (okHttpUtils == null) {                     okHttpUtils = new OkHttpUtils();                 }             }         }         return okHttpUtils;     }     public <T> void getRequest(String url, final Class<T> bean, final RequestJsonBeanCallBack<T> callBack) {         //实例化Request         Request request = new Request.Builder().url(url).build();         okHttpClient.newCall(request).enqueue(new Callback() {             @Override             public void onFailure(Request request, IOException e) {                 handler.post(new Runnable() {                     @Override                     public void run() {                         callBack.error();                     }                 });             }             @Override             public void onResponse(Response response) throws IOException {                String s=response.body().string();                final T result=gson.fromJson(s,bean);                 handler.post(new Runnable() {                     @Override                     public void run() {                      callBack.success(result);                     }                 });             }         });     }     /**      * post请求      *      * @param url      请求的Url      * @param callBack 回调借口  OkHttp默认为子线程已更换为主线程 可在回调的方法中直接更新UI      * @param param    参数对象      * @param <T>      Bean类型      */     public <T> void postRequest(String url, final Class<T> bean,                                   final RequestJsonBeanCallBack<T> callBack, Param... param) {         //调用自定义封装方法 该方法将请求参数封装到Request对象中 并返回         Request request = builderPostRequest(url, param);             okHttpClient.newCall(request).enqueue(new Callback() {                 @Override                 public void onFailure(Request request, IOException e) {                     handler.post(new Runnable() {                         @Override                         public void run() {                             callBack.error();                         }                     });                 }                 @Override                 public void onResponse(Response response) throws IOException {                     String s=response.body().string();                     final T result=gson.fromJson(s,bean);                     handler.post(new Runnable() {                         @Override                         public void run() {                             callBack.success(result);                         }                     });                 }             });     }     /**      * @param url    请求的Url      * @param params post请求的参数  存储在对象中      * @return 封装好的Request对象      */     private Request builderPostRequest(String url, Param[] params) {         //实例化FormEncodingBuilder对象         FormEncodingBuilder builder = new FormEncodingBuilder();         //对请求参数进行判空         if (params == null) {             params = new Param[0];         }         for (Param param : params) {             builder.add(param.key, param.value);         }         RequestBody requestBody = builder.build();         //创建Request对象         Request request = new Request.Builder()                 .url(url)                 .post(requestBody)                 .build();         return request;     }     public interface RequestJsonBeanCallBack<T> {         void success(T result);         void error();     }     //自定义存储类 存储类型为键值对 用于Post请求     public static class Param {         public String key;         public String value;         public Param() {         }         public Param(String key, String value) {             this.key = key;             this.value = value;         }     } } /* dependencies {     compile fileTree(include: ['*.jar'], dir: 'libs')     androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {         exclude group: 'com.android.support', module: 'support-annotations'     })     compile 'com.android.support:appcompat-v7:23.0.0'     testCompile 'junit:junit:4.12'     compile 'com.squareup.okhttp3:okhttp:3.2.0'     compile 'com.squareup.okio:okio:1.7.0'     compile 'com.google.code.gson:gson:2.8.0'     compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'     compile 'com.android.support:recyclerview-v7:23.0.0'     compile 'com.github.bumptech.glide:glide:3.7.0'     compile 'com.squareup.okhttp:okhttp:2.4.0' } */
    转载请注明原文地址: https://ju.6miu.com/read-661944.html

    最新回复(0)