欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android Retrofit2網絡請求封裝介紹

 更新時間:2021年12月30日 09:24:40   作者:扒雞撕坦  
大家好,本篇文章主要講的是android Retrofit2網絡請求封裝介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

1. Retrofit使用

Retrofit是一個現(xiàn)在網絡請求框架,先來說一下怎么使用

網絡權限(添加到AndroidManifest.xml)

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

gradle依賴(添加到build.gradle)

    implementation("com.squareup.okhttp3:okhttp:4.9.2")
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'

定義接口,網絡請求的方法

public interface Request {
 
    @GET("/xx/xx")
    Call<ResponseBody> get();
 
}

實例化Retrofit

Retrofit retrofit = new Retrofit.Builder().baseUrl("BASE_URL").build();

通過Retrofit實例創(chuàng)建接口服務對象

Request request = retrofit.create(Request.class);

調用接口中的方法

Call<ResponseBody> call = request.get();

執(zhí)行異步請求(同步請求需要創(chuàng)建一個新的線程去執(zhí)行)

call.enqueue(new retrofit2.Callback<ResponseBody>() {
            @Override
            public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
 
            }
 
            @Override
            public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {
 
            }
});

2. Retrofit封裝

以上可以看出Retrofit是個好東西,可是用起來是比較麻煩的,所有在實際使用中對Retrofit進行一下小小的封裝是很有必要的。

定義接口(所有的請求參數都是以map的形式)

public interface Request {
 
    /**
     * 不帶參數的get請求
     * @param url
     * @return
     */
    @GET()
    Call<ResponseBody> get(@Url String url);
 
    /**
     * 帶參數的get請求
     * @param url
     * @param map 參數默認是map
     * @return
     */
    @GET()
    Call<ResponseBody> get(@Url String url, @QueryMap Map<String,String> map);
 
    /**
     * 不帶參數的post請求
     * @param url
     * @return
     */
    @POST()
    Call<ResponseBody> post(@Url String url);
 
    /**
     * 帶參數的post請求
     * @param url
     * @param map
     * @return
     */
    @POST()
    @FormUrlEncoded
    Call<ResponseBody> post(@Url String url, @FieldMap Map<String,String> map);
 
    
}

定義RetrofitManager,以單例模式獲取Retrofit實例

public enum RetrofitManager {
 
    /**
     * RetrofitManager的實例
     */
    INSTANCE;
 
    /**
     *
     * 后端接口的baseUrl,且只考慮一個url的情況(ip+端口,或者域名)
     */
    private static final String BASE_URL = " Your BASE_URL";
 
    private Retrofit retrofit;
 
    /**
     * 返回Retrofit實例,不添加轉換器
     * @return
     */
    public Retrofit getRetrofit(){
        if(retrofit == null){
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .build();
        }
        return retrofit;
    }
}

自定義的RetrofitCallback,在發(fā)送請求時,通過匿名對象作為參數獲取后端的響應結果。

public abstract class RetrofitCallback {
 
 
    /**
     * 開始執(zhí)行的方法
     */
    public void onStart(){
        //開啟loading
    }
 
    /**
     * 結束執(zhí)行的方法
     */
    public void onCompleted(){
        //關閉loading
    }
 
    /**
     * 執(zhí)行成功
     * @param resultJsonString  返回的json字符串
     */
    public abstract void onSuccess(String resultJsonString);
 
    /**
     * 失敗
     * @param t 異常
     */
    public abstract void onError(Throwable t);
 
    /**
     * 提示:服務異常
     */
    public void serverErrMsg(){
        //xxx
    }
 
    /**
     * 提示:請求失敗
     */
    public void reqErrMsg(){
        //xxx
    }
 
 
    /**
     * 提示:成功
     */
    public void okMsg(){
        //xxx
    }
 
}

定義RetrofitUtil,封裝get和post方法。將RetrofitCallback作為請求參數,在發(fā)送請求時重寫onSuccess和onError方法,執(zhí)行具體的操作。

public class RetrofitUtil {
 
    private Retrofit(){}
 
    /**
     * 無參的get請求
     * @param url
     * @param callback
     */
    public static void get(String url, RetrofitCallback callback){
        sendRequest(getRequest().get(url),callback);
    }
 
    /**
     * 有參的get請求
     * @param url  請求的url
     * @param map  參數
     * @param callback  請求結束的回調
     */
    public static void get(String url, Map<String,String> map, RetrofitCallback callback){
        sendRequest(getRequest().get(url,map),callback);
    }
 
    /**
     * 無參的post請求
     * @param url
     * @param callback
     */
    public static void post(String url, RetrofitCallback callback){
        sendRequest(getRequest().post(url), callback);
    }
 
    /**
     * 有參的post請求
     * @param url
     * @param map
     * @param callback
     */
    public static void post(String url, Map<String,String> map, RetrofitCallback callback){
        sendRequest(getRequest().post(url,map), callback);
    }
 
 
    /**
     * 獲取Request實例
     * @return
     */
    private static Request getRequest(){
        Retrofit retrofit = RetrofitManager.INSTANCE.getRetrofit();
        return retrofit.create(Request.class);
    }
 
    /**
     * 發(fā)送請求的共通方法,并對響應結果進行處理
     * @param call
     * @param callback 自定義的Callback
     */
    private void sendRequest(Call<ResponseBody> call,RetrofitCallback callback){
 
        //開啟loading
        callback.onStart();
        //異步請求
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                //關閉loading
                callback.onCompleted();
                if(response.isSuccessful()){
                    //執(zhí)行RetrofitCallback的onSuccess方法,獲取響應結果的json字符串
                    try {
                        String result = response.body().string();
                        callback.onSuccess(result);
                        //響應成功
                        if(StringUtils.equals(result, Constant.SUCCESS)){
                            callback.okMsg();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }else{
                    //服務異常
                    callback.serverErrMsg();
                }
            }
 
            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                callback.onCompleted();
                //請求失敗
                callback.onError(t);
 
                callback.reqErrMsg();
               }
            }
        });
    }
}

3. RetrofitUtil使用

get無參請求

RetrofitUtil.get("/xx/xx", new RetrofitCallback() {
    @Override
    public void onSuccess(String resultJsonString) {
                
    }
 
    @Override
    public void onError(Throwable t) {
 
    }
});

get有參請求

Map<String,String> map = new HashMap<>(16);
map.put("key","value");
//xxx
RetrofitUtil.get("/xx/xx", map,new RetrofitCallback() {
    @Override
    public void onSuccess(String resultJsonString) {
        xxxx
    }
 
    @Override
    public void onError(Throwable t) {
        xxxx
    }
});

post請求和get的使用方法相似

最后

本次只對get和post進行了封裝,項目中只用到了這些就沒有對文件上傳下載以及別的請求方式進行封裝。且沒有添加轉換器,可在RetrofitManager的getRetrofit()方法中自行添加。大概的封裝思路就是這樣的,可以自行發(fā)揮。

此文也只是在記錄項目中對Retrofit的使用,對Retrofit的原理并沒有較深的了解。

到此這篇關于android Retrofit2網絡請求封裝介紹的文章就介紹到這了,更多相關android Retrofit2網絡封裝內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Android實現(xiàn)計步器功能

    Android實現(xiàn)計步器功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)計步器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Android短信驗證碼(用的Mob短信驗證)

    Android短信驗證碼(用的Mob短信驗證)

    這篇文章主要為大家詳細介紹了Android短信驗證碼,使用Mob短信驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android 利用ViewPager實現(xiàn)圖片可以左右循環(huán)滑動效果附代碼下載

    Android 利用ViewPager實現(xiàn)圖片可以左右循環(huán)滑動效果附代碼下載

    本文通過一個小demo給大家展示一段代碼實現(xiàn)viewpage圖片左右循環(huán)滑動效果,對viewgager循環(huán)滑動相關知識感興趣的朋友一起學習吧
    2015-11-11
  • android 屏幕亮度調節(jié)方法詳解

    android 屏幕亮度調節(jié)方法詳解

    分析一下自動調節(jié)屏幕亮度手機隨著光線的強度自我調節(jié),也就是在亮的光線下屏幕自動亮一些,暗的時候就自動調暗一些,本文將詳細介紹android 屏幕亮度調節(jié)
    2012-11-11
  • 自己實現(xiàn)的android樹控件treeview

    自己實現(xiàn)的android樹控件treeview

    在項目中經常需要一個需要一個樹狀框架,因為一些原因沒有使用系統(tǒng)自帶的控件,所以就自己寫了一個,現(xiàn)在分享給大家
    2014-01-01
  • android開發(fā)仿ios的UIScrollView實例代碼

    android開發(fā)仿ios的UIScrollView實例代碼

    下面小編就為大家分享一篇android開發(fā)仿ios的UIScrollView實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • android實現(xiàn)多點觸摸應用

    android實現(xiàn)多點觸摸應用

    這篇文章主要為大家詳細介紹了android實現(xiàn)多點觸摸應用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • RecyclerView仿應用列表實現(xiàn)網格布局

    RecyclerView仿應用列表實現(xiàn)網格布局

    這篇文章主要為大家詳細介紹了RecyclerView仿應用列表實現(xiàn)網格布局,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Android中AndroidStudio&Kotlin安裝到運行過程及常見問題匯總

    Android中AndroidStudio&Kotlin安裝到運行過程及常見問題匯總

    這篇文章主要介紹了Android(AndroidStudio&Kotlin)安裝到運行過程及常見問題匯總,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Android開發(fā)中Button組件的使用

    Android開發(fā)中Button組件的使用

    這篇文章主要介紹了Android開發(fā)中Button組件的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07

最新評論