iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0

環境設置

  1. 添加依賴
  • build.gradle(Module)
dependencies {
    ...
    // Rxjava
    implementation 'io.reactivex.rxjava3:rxjava:3.1.5'
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'

    // Retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

    // Retrofit & RxJava
    implementation "com.squareup.retrofit2:adapter-rxjava3:2.9.0"
}
  1. 添加網路權限
  • AndroidManifest.xml
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

網路請求接口

// 傳統方式:Call<...>接口形式
public interface ApiService {
    @GET("URL地址")
    Call<ServerResponse> getResponse();
}

// RxJava方式:Obserable型別<...>接口方式
public interface ApiService {
    @GET("URL地址")
    Single<Response<ServerResponse>> getResponse();
}

網路請求的封裝和發送請求

// ----- 傳統方式 -----
// 1. 創建網路請求接口實例
ApiService apiService = retrofit.create(ApiService.class);

// 2. 採用Call<...>接口對發送請求進行封裝
Call<ServerRespnose> call = apiService.getResponse();

// 3. 發送網路請求(異步)
call.enqueue(new Callback<ServerResponse>() {
    // 請求成功時回調
    @Override
    public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
        // TODO
    }
    
    // 請求失敗時回調
    @Override
    public void onFailure(Call<ServerResponse> call, Thrwable throwable) {
        // TODO
    }
})
    
// ----- RJava方式 -----
// 1. 創建網路請求接口實例
ApiService apiService = retrofit.create(ApiService.class);

// 2. 採用Observable<...>形式對網路請求進行封裝
Observable<ServerResponse> observable = apiService.getResponse();

// 3. 發送網路請求(異步)
observable.subscribeOn(Schedulers.io())        // 在IO線程進行網路請求
          .observeOn(AndroidSchedulers.mainThread())  // 回到主線程 處理請求結果
          .subscribe(new new DisposableSingleObserver<Response<ServerResponse>>() {
              // 請求成功時回調
              @Override
              public void onSuccess(@NonNull Response<ServerResponse> response) {
                // TODO
              }

              // 請求失敗時回調
              @Override
              public void onError(@NonNull Throwable t) {
                // TODO
              }
          });

上一篇
Day20 - Android Retrofit2
下一篇
Day22 - Glide
系列文
Android 開發 30天 初學之路筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言