1. 程式人生 > >retrofit的模擬學習和Eventbus的傳遞一個bean物件和Intent傳遞一個bean物件

retrofit的模擬學習和Eventbus的傳遞一個bean物件和Intent傳遞一個bean物件

一直想好好學習使用retrofit今天就學習總結

首先是github的地址連線:

之後是依賴:

compile 'com.squareup.retrofit2:retrofit:2.3.0'

注意: Retrofit requires at minimum Java 7 or Android 2.3.

關於retrofit的詳解的介紹:

網路請求框架:

 //網路請求框架
compile 'com.squareup.retrofit2:retrofit:2.3.0'  // 上面已經存在
compile 'com.squareup.retrofit2:converter-scalars:2.3.0' //
compile 'com.squareup.retrofit2:converter-gson:2.3.0'  // 
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'  //

retrofit的建立

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();

建立一個retrofit的管理類,實現單例:

我們首先是在application中對retrofit的初始化操作:

//在自定義Application中初始化
public static void init() {
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.connectTimeout(50, TimeUnit.SECONDS);
    builder.readTimeout(50, TimeUnit.SECONDS);
    builder.writeTimeout(50, TimeUnit.SECONDS);
    builder.retryOnConnectionFailure(true);
    OkHttpClient client = builder.build();

    mRetrofit = new Retrofit.Builder()
            .baseUrl(UrlConstant.BASE_URL)
            .addConverterFactory(ScalarsConverterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .client(client)
            .build();
}

解釋如下: 建立一個OkhttpClient,之後設定引數,後最後retrofit的建立.

完整的程式碼:

public class RetrofitManager {

private static RetrofitManager mRetrofitManager;
private static Retrofit mRetrofit;
private static Retrofit mDRetrofit;


// 構造方法的私有

private RetrofitManager() {

}

/**
 * 建立網路請求
 *
 * @param reqServer 網路介面
 * @param <T>       泛型
 * @return 返回網路介面對應的請求類
 */
private  <T> T createReq(Class<T> reqServer) {
    return mRetrofit.create(reqServer);
}
/**
 * 獲取伺服器網路請求介面對應的類
 *
 * @return 伺服器網路請求介面對應的類
 */
public ServerApi getServer() {
    return createReq(ServerApi.class);
   // 實質就是建立了 ServerApi的代理物件
}

/**
 * 返回執行緒安全的單例
 *
 * @return RetrofitManager單例
 */
public static synchronized RetrofitManager getInstance() {
    if (mRetrofitManager == null) {
        mRetrofitManager = new RetrofitManager();
    }
    return mRetrofitManager;
}

//在自定義Application中初始化
public static void init() {
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.connectTimeout(50, TimeUnit.SECONDS);
    builder.readTimeout(50, TimeUnit.SECONDS);
    builder.writeTimeout(50, TimeUnit.SECONDS);
    builder.retryOnConnectionFailure(true);
    OkHttpClient client = builder.build();

    mRetrofit = new Retrofit.Builder()
            .baseUrl(UrlConstant.BASE_URL)
            .addConverterFactory(ScalarsConverterFactory.create()) 
            .addConverterFactory(GsonConverterFactory.create())  //使用工廠模式建立Gason的解析器
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .client(client)
            .build();
}
}

這裡面的幾個類需要說明一下子:

UrlConstant.BASE_URL就是我們的主機host;

ServerApi主要是各個主機訪問地址,會和BASE_URL拼接成完整的路勁來訪問. (Retrofit將 Http請求 抽象成 Java介面:採用 註解 描述網路請求引數 和配置網路請求引數 ,注意點

    第一:用 動態代理 動態 將該介面的註解“翻譯”成一個 Http 請求,最後再執行 Http 請求
    第二:介面中的每個方法的引數都需要使用註解標註,否則會報錯

)

注意點: 建立Retrofit例項時需要通過Retrofit.Builder,並呼叫baseUrl方法設定URL。

baseurl 必須是以斜槓(/)結束的,便於後期的url拼接.

我們的訪問的方法都是定義在一個接口裡面,我們需要呼叫裡面的方法,我麼需要生成一個代理,可以理解為廣播接收者的方法.

retrofit的註解問題

http的請求的方式:常見的就是post 和get請求.

在我們需要設定代理的介面檔案中,最後回你和baseurl組合成完整的路勁,接收的一般是path

使用 Retrofit 的步驟共有7個:

步驟1:新增Retrofit庫的依賴
步驟2:建立 接收伺服器返回資料 的類
步驟3:建立 用於描述網路請求 的介面
步驟4:建立 Retrofit 例項
步驟5:建立 網路請求介面例項 並 配置網路請求引數
步驟6:傳送網路請求(非同步 / 同步)

我們在專案中使用的是Rxjava

依賴的框架:

//RxJava框架
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.5'

日誌列印框架:

 //日誌列印框架  
compile 'com.orhanobut:logger:2.1.1'

註解的分類是:

第一部分就是上面的關於網路請求的註解: get和post比較常見 特殊的一個註解就是 @Http這個註解,可以替換上面的七個註解和更多功能的拓展.

第二類標記類:

第一個標記註解: @formUrlEncoded 表示傳送form-encoded的資料

每個鍵值對需要用@Filed來註解鍵名,隨後的物件需要提供值。

第二個標記註解: @Multipart 表示傳送form-encoded的資料(適用於 有檔案 上傳的場景)

每個鍵值對需要用@Part來註解鍵名,隨後的物件需要提供值。

第三個註解: 返回的形式是以流的形式返回的,使用與資料比較大的情況.

第三類註解:

RxJava與CallAdapter

我們在前面見到的是 converter是可以轉化為我麼需要的實體物件,而不是隻是Responsebody

相同的 CallAdapter 是對call的替換,Observable來替換call;

使用Eventbus來傳遞一個bean物件

recyclerview的使用

最後是一個模擬json的網址: