OkHttp封装类

来源:互联网 发布:淘宝商品被删除 恢复 编辑:程序博客网 时间:2024/05/26 12:58
CacheUtils
import com.squareup.okhttp.Cache;import com.squareup.okhttp.OkHttpClient;import com.squareup.okhttp.Request;import java.io.File;/** * Created by 284385 on 2015/11/28. */public class CacheUtils {    /**     * 设置缓存目录     * @param file     */    public static void setCacheDir(File file){        OkHttpClient client = new OkHttpClient();        //设置缓存大小        int cacheSize = 10 * 1024 * 1024; // 10 MiB        if (!file.exists()) {            file.mkdirs();        }        Cache cache = new Cache(file, cacheSize);        client.setCache(cache);    }    /**     * 设置Http头     * @param url     * @param header     * @return     */    public static Request setHeader(String url,String header){        //这里的header可以为"no-cache"、"only-if-cached"等。        //如果为"no-cache"则表示为强制使用网络        //如果为"only-if-cached"则表示为强制使用缓存响应        //当然还可以配置缓存过期时间。        Request request = new Request.Builder()                .header("Cache-Control", header)                .url(url)                .build();        return request;    }}

GZIPRequestInterceptor
package com.bwie.fanjianxiang.network;import com.squareup.okhttp.Interceptor;import com.squareup.okhttp.MediaType;import com.squareup.okhttp.Request;import com.squareup.okhttp.RequestBody;import com.squareup.okhttp.Response;import java.io.IOException;import okio.Buffer;import okio.BufferedSink;import okio.GzipSink;import okio.Okio;/** * Created by 284385 on 2015/12/14. * 通过拦截器实现对requestbody的压缩。 */public class GZIPRequestInterceptor implements Interceptor{    @Override    public Response intercept(Chain chain) throws IOException {        Request originalRequest=chain.request();        if(originalRequest.body()==null || originalRequest.header("Content-Encoding")!=null){            return  chain.proceed(originalRequest);        }        Request compressRequest = originalRequest.newBuilder()                .header("Content-Encoding", "gzip")                .method(originalRequest.method(), gzip(originalRequest.body()))                .build();        return chain.proceed(compressRequest);    }    private RequestBody gzip(final RequestBody body){        final Buffer buffer=new Buffer();        try {            body.writeTo(buffer);        } catch (IOException e) {            e.printStackTrace();        }        return new RequestBody() {            @Override            public MediaType contentType() {                return body.contentType();            }            @Override            public long contentLength() throws IOException {                return buffer.size();            }            @Override            public void writeTo(BufferedSink bufferedSink) throws IOException {                bufferedSink.write(buffer.snapshot());            }        };    }}

ImageUtils
package com.bwie.fanjianxiang.network;import android.graphics.BitmapFactory;import android.util.DisplayMetrics;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import java.io.InputStream;import java.lang.reflect.Field;public class ImageUtils {    /**     * 根据InputStream获取图片实际的宽度和高度     *     * @param imageStream     * @return     */    public static ImageSize getImageSize(InputStream imageStream) {        BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeStream(imageStream, null, options);        return new ImageSize(options.outWidth, options.outHeight);    }    public static class ImageSize {        int width;        int height;        public ImageSize() {        }        public ImageSize(int width, int height) {            this.width = width;            this.height = height;        }        @Override        public String toString() {            return "ImageSize{" + "width=" + width + ", height=" + height + '}';        }    }    public static int calculateInSampleSize(ImageSize srcSize,                                            ImageSize targetSize) {        // 源图片的宽度        int width = srcSize.width;        int height = srcSize.height;        int inSampleSize = 1;        int reqWidth = targetSize.width;        int reqHeight = targetSize.height;        if (width > reqWidth && height > reqHeight) {            // 计算出实际宽度和目标宽度的比率            int widthRatio = Math.round((float) width / (float) reqWidth);            int heightRatio = Math.round((float) height / (float) reqHeight);            inSampleSize = Math.max(widthRatio, heightRatio);        }        return inSampleSize;    }    /**     * 根据ImageView获取适当的压缩的宽和高     *     * @param view     * @return     */    public static ImageSize getImageViewSize(View view) {        ImageSize imageSize = new ImageSize();        imageSize.width = getExpectWidth(view);        imageSize.height = getExpectHeight(view);        return imageSize;    }    /**     * 根据view获得期望的高度     *     * @param view     * @return     */    private static int getExpectHeight(View view) {        int height = 0;        if (view == null)            return 0;        final ViewGroup.LayoutParams params = view.getLayoutParams();        // 如果是WRAP_CONTENT,此时图片还没加载,getWidth根本无效        if (params != null                && params.height != ViewGroup.LayoutParams.WRAP_CONTENT) {            height = view.getWidth(); // 获得实际的宽度        }        if (height <= 0 && params != null) {            height = params.height; // 获得布局文件中的声明的宽度        }        if (height <= 0) {            height = getImageViewFieldValue(view, "mMaxHeight");// 获得设置的最大的宽度        }        // 如果宽度还是没有获取到则使用屏幕的宽度        if (height <= 0) {            DisplayMetrics displayMetrics = view.getContext().getResources()                    .getDisplayMetrics();            height = displayMetrics.heightPixels;        }        return height;    }    /**     * 根据view获得期望的宽度     *     * @param view     * @return     */    private static int getExpectWidth(View view) {        int width = 0;        if (view == null)            return 0;        final ViewGroup.LayoutParams params = view.getLayoutParams();        // 如果是WRAP_CONTENT,此时图片还没加载,getWidth根本无效        if (params != null                && params.width != ViewGroup.LayoutParams.WRAP_CONTENT) {            width = view.getWidth(); // 获得实际的宽度        }        if (width <= 0 && params != null) {            width = params.width; // 获得布局文件中的声明的宽度        }        if (width <= 0)        {            width = getImageViewFieldValue(view, "mMaxWidth");// 获得设置的最大的宽度        }        // 如果宽度还是没有获取到则使用屏幕的宽度        if (width <= 0)        {            DisplayMetrics displayMetrics = view.getContext().getResources()                    .getDisplayMetrics();            width = displayMetrics.widthPixels;        }        return width;    }    /**     * 通过反射获取imageview的某个属性值     *     * @param object     * @param fieldName     * @return     */    private static int getImageViewFieldValue(Object object, String fieldName) {        int value = 0;        try {            Field field = ImageView.class.getDeclaredField(fieldName);            field.setAccessible(true);            int fieldValue = field.getInt(object);            if (fieldValue > 0 && fieldValue < Integer.MAX_VALUE) {                value = fieldValue;            }        } catch (Exception e) {            e.printStackTrace();        }        return value;    }}

OkHttpClientManager
import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Handler;import android.os.Looper;import android.widget.ImageView;import com.google.gson.Gson;import com.google.gson.JsonParseException;import com.squareup.okhttp.Call;import com.squareup.okhttp.Callback;import com.squareup.okhttp.FormEncodingBuilder;import com.squareup.okhttp.Headers;import com.squareup.okhttp.MediaType;import com.squareup.okhttp.MultipartBuilder;import com.squareup.okhttp.OkHttpClient;import com.squareup.okhttp.Request;import com.squareup.okhttp.RequestBody;import com.squareup.okhttp.Response;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.CookieManager;import java.net.CookiePolicy;import java.net.FileNameMap;import java.net.URLConnection;import java.util.Map;import java.util.Set;public class OkHttpClientManager {    private static OkHttpClientManager mInstance;    private OkHttpClient mOkHttpClient;    private Handler mDelivery;    private Gson mGson;    /**     * 初始化对象     */    private OkHttpClientManager() {        mOkHttpClient = new OkHttpClient();        // cookie enabled        mOkHttpClient.setCookieHandler(new CookieManager(null,                CookiePolicy.ACCEPT_ORIGINAL_SERVER));        mDelivery = new Handler(Looper.getMainLooper());        mGson = new Gson();    }    /**     * @Title: getInstance     * @Description: TODO(获取OkHttpClientManager对象)     * @param @return    设定文件     * @return OkHttpClientManager    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static OkHttpClientManager getInstance() {        if (mInstance == null) {            synchronized (OkHttpClientManager.class) {                if (mInstance == null) {                    mInstance = new OkHttpClientManager();                }            }        }        return mInstance;    }    /**     * @Title: _getSyn     * @Description: TODO(同步的Get请求)     * @param @param url     * @param @return     * @param @throws IOException    设定文件     * @return Response    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public Response _getSyn(String url) throws IOException {        final Request request = new Request.Builder().url(url).build();        Call call = mOkHttpClient.newCall(request);        Response execute = call.execute();        return execute;    }    /**     * @param      * @Title: _getAsyn     * @Description: TODO(异步的get请求)     * @param @param url     * @param @param callback    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public  void _getAsyn(String url, final ResultCallback callback) {        final Request request = new Request.Builder().url(url).build();        deliveryResult(callback, request);    }    /**     * @Title: _postSyn     * @Description: TODO(同步的Post请求)     * @param @param url     * @param @param params     * @param @return     * @param @throws IOException    设定文件     * @return Response    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public Response _postSyn(String url, Map params) throws IOException {        Param[] paramsArr = map2Params(params);        Request request = buildPostRequest(url, paramsArr);        Response response = mOkHttpClient.newCall(request).execute();        return response;    }    /**     * @param      * @Title: _postAsyn     * @Description: TODO(异步的post请求)     * @param @param url     * @param @param callback     * @param @param params    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public  void _postAsyn(String url, Map params,                              final ResultCallback callback) {        Param[] paramsArr = map2Params(params);        Request request = buildPostRequest(url, paramsArr);        deliveryResult(callback, request);    }    /**     * @Title: _UploadPostSyn     * @Description: TODO(同步基于post的多文件上传)     * @param @param url     * @param @param files     * @param @param fileKeys     * @param @param params     * @param @return     * @param @throws IOException    设定文件     * @return Response    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public Response _UploadPostSyn(String url, Map params,File[] files, String[] fileKeys    ) throws IOException {        Param[] paramsArr = map2Params(params);        Request request = buildMultipartFormRequest(url, files, fileKeys,                paramsArr);        return mOkHttpClient.newCall(request).execute();    }    /**     * @Title: _UploadPostSyn     * @Description: TODO(同步基于post的单文件上传)     * @param @param url     * @param @param file     * @param @param fileKey     * @param @param params     * @param @return     * @param @throws IOException    设定文件     * @return Response    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public Response _UploadPostSyn(String url, Map params,File file, String fileKey    ) throws IOException {        Param[] paramsArr = map2Params(params);        Request request = buildMultipartFormRequest(url, new File[]{file},                new String[]{fileKey}, paramsArr);        return mOkHttpClient.newCall(request).execute();    }    /**     * @param      * @Title: _UploadPostAsyn     * @Description: TODO(异步的post多文件上传)     * @param @param url     * @param @param callback     * @param @param files     * @param @param fileKeys     * @param @param params     * @param @throws IOException    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public  void _UploadPostAsyn(String url, Map params, File[] files, String[] fileKeys,ResultCallback callback)            throws IOException {        Param[] paramsArr = map2Params(params);        Request request = buildMultipartFormRequest(url, files, fileKeys,                paramsArr);        deliveryResult(callback, request);    }    /**     * @param      * @Title: _UploadPostAsyn     * @Description: TODO(异步基于post的单文件上传)     * @param @param url     * @param @param callback     * @param @param file     * @param @param fileKey     * @param @param params     * @param @throws IOException    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public  void _UploadPostAsyn(String url, Map params,                                    File file, String fileKey,ResultCallback callback ) throws IOException {        Param[] paramsArr = map2Params(params);        Request request = buildMultipartFormRequest(url, new File[]{file},                new String[]{fileKey}, paramsArr);        deliveryResult(callback, request);    }    /**     * @param      * @Title: _downloadAsyn     * @Description: TODO(异步下载文件)     * @param @param url     * @param @param destFileDir     * @param @param callback    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public  void _downloadAsyn(final String url, final String destFileDir,                                  final ResultCallback callback) {        final Request request = new Request.Builder().url(url).build();        final Call call = mOkHttpClient.newCall(request);        call.enqueue(new Callback() {            @Override            public void onFailure(final Request request, final IOException e) {                sendFailedStringCallback(request, e, callback);            }            @Override            public void onResponse(Response response) {                InputStream is = null;                byte[] buf = new byte[2048];                int len = 0;                FileOutputStream fos = null;                try {                    is = response.body().byteStream();                    File file = new File(destFileDir, getFileName(url));                    fos = new FileOutputStream(file);                    while ((len = is.read(buf)) != -1) {                        fos.write(buf, 0, len);                    }                    fos.flush();                    /**                     *   如果下载文件成功,第一个参数为文件的绝对路径                     */                    sendSuccessResultCallback(file.getAbsolutePath(), callback);                } catch (IOException e) {                    sendFailedStringCallback(response.request(), e, callback);                } finally {                    try {                        if (is != null)                            is.close();                    } catch (IOException e) {                    }                    try {                        if (fos != null)                            fos.close();                    } catch (IOException e) {                    }                }            }        });    }    /**     * @Title: _displayImage     * @Description: TODO(图片的异步加载)     * @param @param view     * @param @param url     * @param @param errorResId    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public void _displayImage(final ImageView view, final String url,                              final int errorResId) {        final Request request = new Request.Builder().url(url).build();        Call call = mOkHttpClient.newCall(request);        call.enqueue(new Callback() {            @Override            public void onFailure(Request request, IOException e) {                setErrorResId(view, errorResId);            }            @Override            public void onResponse(Response response) {                InputStream is = null;                try {                    is = response.body().byteStream();                    ImageUtils.ImageSize actualImageSize = ImageUtils                            .getImageSize(is);                    ImageUtils.ImageSize imageViewSize = ImageUtils                            .getImageViewSize(view);                    int inSampleSize = ImageUtils.calculateInSampleSize(                            actualImageSize, imageViewSize);                    try {                        is.reset();                    } catch (IOException e) {                        response = _getSyn(url);                        is = response.body().byteStream();                    }                    BitmapFactory.Options ops = new BitmapFactory.Options();                    ops.inJustDecodeBounds = false;                    ops.inSampleSize = inSampleSize;                    final Bitmap bm = BitmapFactory.decodeStream(is, null, ops);                    mDelivery.post(new Runnable() {                        @Override                        public void run() {                            view.setImageBitmap(bm);                        }                    });                } catch (Exception e) {                    setErrorResId(view, errorResId);                } finally {                    if (is != null)                        try {                            is.close();                        } catch (IOException e) {                            e.printStackTrace();                        }                }            }        });    }    /**     * @Title: getFileName     * @Description: TODO(获取文件名)     * @param @param path     * @param @return    设定文件     * @return String    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    private String getFileName(String path) {        int separatorIndex = path.lastIndexOf("/");        return (separatorIndex < 0) ? path : path.substring(separatorIndex + 1,                path.length());    }    /**     * @Title: setErrorResId     * @Description: TODO(图片加载出错时的默认图片)     * @param @param view     * @param @param errorResId    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    private void setErrorResId(final ImageView view, final int errorResId) {        mDelivery.post(new Runnable() {            @Override            public void run() {                view.setImageResource(errorResId);            }        });    }    /**     * @Title: buildMultipartFormRequest     * @Description: TODO(文件上传的封装)     * @param @param url     * @param @param files     * @param @param fileKeys     * @param @param params     * @param @return    设定文件     * @return Request    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    private Request buildMultipartFormRequest(String url, File[] files,                                              String[] fileKeys, Param[] params) {        params = validateParam(params);        MultipartBuilder builder = new MultipartBuilder()                .type(MultipartBuilder.FORM);        for (Param param : params) {            builder.addPart(                    Headers.of("Content-Disposition", "form-data; name=\""                            + param.key + "\""),                    RequestBody.create(null, param.value));        }        if (files != null) {            RequestBody fileBody = null;            for (int i = 0; i < files.length; i++) {                File file = files[i];                String fileName = file.getName();                fileBody = RequestBody.create(                        MediaType.parse(guessMimeType(fileName)), file);                // TODO 根据文件名设置contentType                builder.addPart(                        Headers.of("Content-Disposition", "form-data; name=\""                                + fileKeys[i] + "\"; filename=\"" + fileName                                + "\""), fileBody);            }        }        RequestBody requestBody = builder.build();        return new Request.Builder().url(url).post(requestBody).build();    }    /**     * @Title: guessMimeType     * @Description: TODO(获取文件的mime类型)     * @param @param name     * @param @return    设定文件     * @return String    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public String guessMimeType(String name) {        FileNameMap fileNameMap = URLConnection.getFileNameMap();        String contentTypeFor = fileNameMap.getContentTypeFor(name);        if (contentTypeFor == null) {            contentTypeFor = "application/octet-stream";        }        return contentTypeFor;    }    /**     * @Title: validateParam     * @Description: TODO(对Param[]的校验)     * @param @param params     * @param @return    设定文件     * @return Param[]    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    private Param[] validateParam(Param[] params) {        if (params == null)            return new Param[0];        else            return params;    }    /**     * @Title: map2Params     * @Description: TODO(对参数的转换)     * @param @param params     * @param @return    设定文件     * @return Param[]    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    private Param[] map2Params(Map params) {        if (params == null)            return new Param[0];        int size = params.size();        Param[] res = new Param[size];        Set> entries = params.entrySet();        int i = 0;        for (Map.Entry entry : entries) {            res[i++] = new Param(entry.getKey(), entry.getValue());        }        return res;    }    /**     * @param      * @Title: deliveryResult     * @Description: TODO(对request的处理)     * @param @param callback     * @param @param request    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    private  void deliveryResult(final ResultCallback callback,                                    Request request) {        mOkHttpClient.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(final Request request, final IOException e) {                sendFailedStringCallback(request, e, callback);            }            @Override            public void onResponse(final Response response) {                try {                    final String string = response.body().string();                    if (callback.mType == String.class) {                        sendSuccessResultCallback(string, callback);                    } else {                        Object o = mGson.fromJson(string, callback.mType);                        sendSuccessResultCallback(o, callback);                    }                } catch (IOException e) {                    sendFailedStringCallback(response.request(), e, callback);                } catch (JsonParseException e) {// Json解析的错误                    sendFailedStringCallback(response.request(), e, callback);                }            }        });    }    /**     * @param      * @Title: sendFailedStringCallback     * @Description: TODO(失败的回调)     * @param @param request     * @param @param e     * @param @param callback    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    private  void sendFailedStringCallback(final Request request,                                              final Exception e, final ResultCallback callback) {        mDelivery.post(new Runnable() {            @Override            public void run() {                if (callback != null)                    callback.onError(request, e);            }        });    }    /**     * @param      * @Title: sendSuccessResultCallback     * @Description: TODO(成功的回调)     * @param @param object     * @param @param callback    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    private  void sendSuccessResultCallback(final Object object,                                               final ResultCallback callback) {        mDelivery.post(new Runnable() {            @Override            public void run() {                if (callback != null) {                    callback.onResponse((T) object);                }            }        });    }    /**     * @Title: buildPostRequest     * @Description: TODO(post方式提交参数封装)     * @param @param url     * @param @param params     * @param @return    设定文件     * @return Request    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    private Request buildPostRequest(String url, Param[] params) {        if (params == null) {            params = new Param[0];        }        FormEncodingBuilder builder = new FormEncodingBuilder();        for (Param param : params) {            builder.add(param.key, param.value);        }        RequestBody requestBody = builder.build();        return new Request.Builder().url(url).post(requestBody).build();    }}

OkhttpUtils
package com.bwie.fanjianxiang.network;import android.widget.ImageView;import com.squareup.okhttp.Response;import java.io.File;import java.io.IOException;import java.util.Map;/** * 工具类 */public class OkhttpUtils {    /**     * @Title: getSyn     * @Description: TODO(同步get请求)     * @param @param url     * @param @return     * @param @throws IOException    设定文件     * @return Response    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static Response getSyn(String url) throws IOException {        return OkHttpClientManager.getInstance()._getSyn(url);    }    /**     * @param      * @Title: getAsyn     * @Description: TODO(异步的get请求)     * @param @param url     * @param @param callback    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static  void getAsyn(String url,ResultCallback callback){        OkHttpClientManager.getInstance()._getAsyn(url,callback);    }    /**     * @Title: postSyn     * @Description: TODO(同步的Post请求)     * @param @param url     * @param @param params     * @param @return     * @param @throws IOException    设定文件     * @return Response    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static Response postSyn(String url, Map params) throws IOException {        return OkHttpClientManager.getInstance()._postSyn(url,params);    }    /**     * @param      * @Title: postAsyn     * @Description: TODO(异步的post请求)     * @param @param url     * @param @param params     * @param @param callback    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static  void postAsyn(String url, Map params,                                    ResultCallback callback){        OkHttpClientManager.getInstance()._postAsyn(url,params,callback);    }    /**     * @Title: UploadPostSyn     * @Description: TODO(异步的post请求)     * @param @param url     * @param @param params     * @param @param files     * @param @param fileKeys     * @param @return     * @param @throws IOException    设定文件     * @return Response    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static Response UploadPostSyn(String url, Map params,File[] files,                                         String[] fileKeys) throws IOException {        return OkHttpClientManager.getInstance()._UploadPostSyn(url,params,files,fileKeys);    }    /**     * @Title: UploadPostSyn     * @Description: TODO(同步基于post的单文件上传)     * @param @param url     * @param @param params     * @param @param file     * @param @param fileKey     * @param @return     * @param @throws IOException    设定文件     * @return Response    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static Response UploadPostSyn(String url, Map params,File file,                                         String fileKey) throws IOException {        return OkHttpClientManager.getInstance()._UploadPostSyn(url,params,file,fileKey);    }    /**     * @param      * @Title: UploadPostAsyn     * @Description: TODO(异步post多文件上传)     * @param @param url     * @param @param params     * @param @param files     * @param @param fileKeys     * @param @param callback     * @param @throws IOException    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static  void UploadPostAsyn(String url, Map params, File[] files, String[] fileKeys,                                          ResultCallback callback)throws IOException{        OkHttpClientManager.getInstance()._UploadPostAsyn(url, params, files, fileKeys, callback);    }    /**     * @param      * @Title: UploadPostAsyn     * @Description: TODO(异步post单文件上传)     * @param @param url     * @param @param params     * @param @param file     * @param @param fileKey     * @param @param callback     * @param @throws IOException    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static  void UploadPostAsyn(String url, Map params,                                          File file, String fileKey,ResultCallback callback ) throws IOException {        OkHttpClientManager.getInstance()._UploadPostAsyn(url, params, file, fileKey, callback);    }    /**     * @param      * @Title: downloadAsyn     * @Description: TODO(异步下载文件)     * @param @param url     * @param @param destFileDir     * @param @param callback    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static  void downloadAsyn(String url, String destFileDir,                                        ResultCallback callback){        OkHttpClientManager.getInstance()._downloadAsyn(url, destFileDir, callback);    }    /**     * @Title: displayImage     * @Description: TODO(图片的异步加载)     * @param @param view     * @param @param url     * @param @param errorResId    设定文件     * @return void    返回类型     * @author: minliang@deppon.com | 284385     * @throws     */    public static void displayImage(ImageView view,String url,int errorResId){        OkHttpClientManager.getInstance()._displayImage(view,url,errorResId);    }}

Param
public class Param {    public String key;    public String value;    public Param(String key, String value) {        this.key = key;        this.value = value;    }}


package com.bwie.fanjianxiang.network;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import com.google.gson.internal.$Gson$Types;import com.squareup.okhttp.Request;public abstract class ResultCallback {    public Type mType;    public ResultCallback() {        mType = getSuperclassTypeParameter(getClass());    }    static Type getSuperclassTypeParameter(Class subclass) {    //获取带有泛型的父类        Type superclass = subclass.getGenericSuperclass();        if (superclass instanceof Class) {            throw new RuntimeException("Missing type parameter.");        }        //获取泛型        ParameterizedType parameterized = (ParameterizedType) superclass;        return $Gson$Types.canonicalize(parameterized                .getActualTypeArguments()[0]);    }    public abstract void onError(Request request, Exception e);    public abstract void onResponse(T response);}



原创粉丝点击