亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Retrofit的簡單封裝

2019-11-08 00:20:15
字體:
來源:轉載
供稿:網友

封裝類BaseApi

package com.xinchuang.buynow.util.retrofitUtil;import android.os.AsyncTask;import android.util.Log;import com.xinchuang.buynow.model.BaseRetData;import com.xinchuang.buynow.util.MyLog;import com.xinchuang.buynow.util.constants.RequestUrl;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import okhttp3.ResponseBody;import retrofit2.Call;import retrofit2.Callback;import retrofit2.GsonConverterFactory;import retrofit2.Response;import retrofit2.Retrofit;import retrofit2.http.GET;import retrofit2.http.Streaming;import retrofit2.http.Url;/** * 網絡請求的基類  所有的網絡請求功能都要繼承它 * 里面自定義了ApiCallBack接口   如果不需要三個回調方法   可以實現ApiCallback接口 * Created by 123 on 17/2/21. */public class BaseApi {    PRivate static final String mBaseUrl =  RequestUrl.ip;    protected Retrofit mRetrofit;    private final String TAG = "BaseApi";    public BaseApi() {        mRetrofit = new Retrofit.Builder()                .baseUrl(mBaseUrl)                .addConverterFactory(GsonConverterFactory.create())                .build();    }    public BaseApi(String baseUrl) {        mRetrofit = new Retrofit.Builder()                .baseUrl(baseUrl)                .addConverterFactory(GsonConverterFactory.create())                .build();    }    /**     * 處理retrofit回調 并調用ApiCallback相應返回     * */    protected class RetrofitCallback<T> implements Callback<T> {        private ApiCallback<T> mCallback;        public RetrofitCallback(ApiCallback<T> callback) {            mCallback = callback;        }        @Override        public void onResponse(Call<T> call, Response<T> response) {            if(response.isSuccessful()) {                mCallback.onSuccess(((T)response.body()));//                if(((BaseRetData)response.body()).ret == 1) {//                    mCallback.onSuccess(((T)response.body()));//                } else {//                    mCallback.onError(((BaseRetData)response.body()).err_code, ((BaseRetData)response.body()).err_msg);//                }            } else {                mCallback.onFailure();            }        }        @Override        public void onFailure(Call<T> call, Throwable t) {            MyLog.e(TAG,"api failure,throw=" + t.getMessage());            t.printStackTrace();            mCallback.onFailure();        }    }    /**     * 自定義 Api 回調     * 子類如果不需要三個方法  可以選擇實現接口  重寫方法     */    public interface ApiCallback<T> {        void onSuccess(T ret);        //ret=1時返回        void onError(int err_code, String err_msg);   //ret=0時返回        void onFailure();   //網絡請求失敗    }    /**     * 文件下載回調     */    public interface FileDownloadCallback {        void onSuccess();   //下載成功返回        void onProcess(long fileSizeDownloaded, long fileSize);   //下載進度        void onFailure();   //網絡請求失敗    }    /**     * 下載文件     * @param fileUrl 下載url     * @param filePath 本地保存path     * @param callback FileDownloadCallback回調     */    public void downloadFile(final String fileUrl, final String filePath, final FileDownloadCallback callback) {        final ApiService apiStore = mRetrofit.create(ApiService.class);        new AsyncTask<Void, Long, Void>() {            @Override            protected Void doInBackground(Void... params) {                Call<ResponseBody> call = apiStore.downloadFile(fileUrl);                call.enqueue(new Callback<ResponseBody>() {                    @Override                    public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {                        if (response.isSuccessful()) {                            new AsyncTask<Void, Void, Void>() {                                private boolean mWrittenToDisk;                                @Override                                protected Void doInBackground(Void... voids) {                                    mWrittenToDisk = writeResponseBodyToDisk(response.body(), filePath, callback);                                    return null;                                }                                @Override                                protected void onPostExecute(Void aVoid) {                                    if(mWrittenToDisk) {                                        callback.onSuccess();                                    } else {                                        callback.onFailure();                                    }                                }                            }.execute();                        } else {                            callback.onFailure();                        }                    }                    @Override                    public void onFailure(Call<ResponseBody> call, Throwable t) {                        callback.onFailure();                    }                });                return null;            }        }.execute();    }    /**     * responsebody寫入文件     * @param body     * @param filePath     * @param callback     * @return     */    private boolean writeResponseBodyToDisk(ResponseBody body, String filePath, FileDownloadCallback callback) {        try {            File file = new File(filePath);            String dir = filePath.substring(0, filePath.lastIndexOf('/'));            File fileDir = new File(dir);            if(!fileDir.exists()) {                fileDir.mkdirs();            }            InputStream inputStream = null;            OutputStream outputStream = null;            try {                byte[] fileReader = new byte[4096];                long fileSize = body.contentLength();                long fileSizeDownloaded = 0;                inputStream = body.byteStream();                outputStream = new FileOutputStream(file);                while (true) {                    int read = inputStream.read(fileReader);                    if (read == -1) {                        break;                    }                    outputStream.write(fileReader, 0, read);                    fileSizeDownloaded += read;                    callback.onProcess(fileSizeDownloaded, fileSize);                }                outputStream.flush();                return true;            } catch (IOException e) {                file.delete();                return false;            } finally {                if (inputStream != null) {                    inputStream.close();                }                if (outputStream != null) {                    outputStream.close();                }            }        } catch (IOException e) {            return false;        }    }    /**     *  ApiStroe     */    public interface ApiService {        @Streaming        @GET        Call<ResponseBody> downloadFile(@Url String fileUrl);    }}實現類DemoApi

package com.xinchuang.buynow.util.retrofitUtil.Apis;import com.xinchuang.buynow.model.Owner;import com.xinchuang.buynow.util.retrofitUtil.BaseApi;import retrofit2.Call;import retrofit2.http.GET;import retrofit2.http.Query;/** *   Created by 123 on 2017/2/21. */public class DemoApi extends BaseApi{    private final ShowService showApi;    public DemoApi(String baseUrl) {        super(baseUrl);        showApi = mRetrofit.create(ShowService.class);    }    public void getAnswers(String tags,ApiCallback callback){        Call<Owner> ownerCall = showApi.getAnswers(tags);        ownerCall.enqueue(new RetrofitCallback<Owner>(callback));    }    public static class DemoCallBack implements ApiCallback<Owner>{        @Override        public void onSuccess(Owner ret) {        }        @Override        public void onError(int err_code, String err_msg) {        }        @Override        public void onFailure() {        }    }    public interface ShowService{        @GET("/answers?order=desc&sort=activity&site=stackoverflow")        Call<Owner> getAnswers(@Query("tagged") String tags);    }}在方法里調用

button.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {                new DemoApi("https://api.stackexchange.com/2.2/").getAnswers("java", new DemoApi.DemoCallBack(){            @Override            public void onSuccess(Owner ret) {                Toast.makeText(mContext,"success",Toast.LENGTH_LONG).show();            }        });    }});


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美影视| 亚洲午夜未满十八勿入免费观看全集| 亚洲一区二区中文| 亚洲午夜性刺激影院| 欧美大片第1页| 国内精品小视频| 国产精品吊钟奶在线| 国产精品一区二区三区免费视频| 久久中文字幕视频| 欧美中文字幕第一页| 亚洲成人精品在线| 色播久久人人爽人人爽人人片视av| 欧美成人性生活| 亚洲第一精品电影| 精品久久久久久亚洲精品| 久久久91精品国产一区不卡| 久久久国产精品视频| 久久综合伊人77777蜜臀| 亚洲第一区中文字幕| 色妞久久福利网| 亚洲国产成人久久综合| 亚洲欧美综合精品久久成人| 国产精品香蕉国产| 久久久久久久久亚洲| 成人激情黄色网| 日韩一区av在线| 久久久久久网站| 韩国日本不卡在线| 色偷偷88888欧美精品久久久| 91美女片黄在线观| 夜夜嗨av一区二区三区四区| 97在线视频观看| 亚洲精品自拍第一页| 国产精品偷伦一区二区| 亚洲国产精品推荐| 日韩有码在线视频| 91亚洲国产精品| 国内精久久久久久久久久人| 免费成人高清视频| 国产精品老女人精品视频| 欧美日韩免费网站| 欧洲成人性视频| 成人免费视频在线观看超级碰| 国产精品中文字幕久久久| 欧美日韩国产中文字幕| 久久影院模特热| 欧美视频在线免费看| 欧美激情xxxx| 国产女同一区二区| 欧美极品美女视频网站在线观看免费| 超碰日本道色综合久久综合| 九九精品在线视频| 国产欧美欧洲在线观看| 欧美激情一区二区久久久| 亚洲欧美中文另类| 欧亚精品在线观看| 欧美日韩在线免费观看| 日韩视频―中文字幕| 亚洲精品欧美一区二区三区| 这里精品视频免费| 日本精品免费一区二区三区| 欧美视频在线观看 亚洲欧| 国产精品视频久久久| 亚洲人成电影在线播放| 欧美伊久线香蕉线新在线| 欧美天天综合色影久久精品| 日韩av网站导航| 欧美日韩中文字幕在线视频| 中文字幕欧美精品在线| 久久久国产精品免费| 97久久精品人人澡人人爽缅北| 欧美激情久久久久| 日本成人精品在线| 裸体女人亚洲精品一区| 2018日韩中文字幕| 欧美极品少妇xxxxⅹ裸体艺术| 国产欧美日韩免费看aⅴ视频| 一本一本久久a久久精品综合小说| 成人国产精品一区| 亚洲三级 欧美三级| 色妞在线综合亚洲欧美| 久久精品国产一区二区三区| 国产精品第1页| 亚洲欧洲日产国产网站| 欧美视频一区二区三区…| 国产精品999| 日韩成人黄色av| 麻豆一区二区在线观看| 欧美色另类天堂2015| 国产精品久久一区主播| 亚洲人成免费电影| 美女av一区二区| 91久久精品视频| 亚洲精品av在线播放| 国产精品欧美日韩久久| 欧美在线一区二区三区四| 欧洲精品久久久| 亚洲精品女av网站| 国产精品视频公开费视频| 国内精品久久影院| 亚州国产精品久久久| 97**国产露脸精品国产| 亚洲国产精品成人精品| 96国产粉嫩美女| www国产亚洲精品久久网站| 欧美日韩亚洲一区二区三区| 在线观看精品国产视频| 久久久久久噜噜噜久久久精品| 久久99久久久久久久噜噜| 国产精品伦子伦免费视频| 久久久最新网址| 亚洲国产精品99久久| 亚洲欧美日韩精品| 精品国产91久久久| 欧美极品xxxx| 久久人人爽人人爽人人片亚洲| 一本色道久久综合狠狠躁篇的优点| 日韩天堂在线视频| 91国产视频在线播放| 欧美日本啪啪无遮挡网站| 中文字幕精品在线| 欧美日韩亚洲91| 亚洲综合一区二区不卡| 精品视频9999| 国产香蕉精品视频一区二区三区| 日韩av电影在线播放| 亚洲色图五月天| 国产精品一香蕉国产线看观看| 中文字幕亚洲综合| 久久久成人精品| 日韩成人av在线| 欧美诱惑福利视频| 91精品久久久久久| 日韩欧美中文第一页| 38少妇精品导航| 成人精品一区二区三区电影黑人| 一级做a爰片久久毛片美女图片| 国产成人综合精品在线| 97在线免费观看| 91夜夜揉人人捏人人添红杏| 国内精品一区二区三区四区| 欧美国产在线电影| 国产精品免费一区豆花| 国产精品高清免费在线观看| 欧美日韩免费在线观看| 国产精品久久久久久久久久ktv| 日韩av三级在线观看| 夜夜躁日日躁狠狠久久88av| 欧美日韩国产中文精品字幕自在自线| 欧美激情精品在线| 国内精品久久久久久久| 性欧美长视频免费观看不卡| 中文字幕欧美精品在线| 国产精品网站大全| 亚洲国产精品99| 欧美激情中文字幕在线| 亚洲在线免费视频| 精品国产一区二区三区在线观看| 深夜福利91大全| 亚洲成人网久久久| 日韩亚洲欧美中文在线| 美乳少妇欧美精品| 精品中文字幕在线2019| 91精品国产综合久久香蕉|