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的網址: