在使用RxJava和Retrofit进行网络请求时,等待API调用完成并处理响应是一个常见的需求。下面是一个简单的示例,展示了如何使用RxJava和Retrofit来实现这一点。
首先,确保在你的build.gradle
文件中添加了RxJava和Retrofit的依赖:
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
implementation 'io.reactivex.rxjava3:rxjava:3.1.3'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
}
创建一个Retrofit实例,并配置RxJava适配器:
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class ApiClient {
private static final String BASE_URL = "https://api.example.com/";
private static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.build();
}
return retrofit;
}
}
定义一个接口来描述你的API调用:
import io.reactivex.rxjava3.core.Observable;
import retrofit2.http.GET;
import retrofit2.http.Path;
public interface ApiService {
@GET("users/{user}")
Observable<User> getUser(@Path("user") String user);
}
使用RxJava的操作符来处理API调用和响应:
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ApiService apiService = ApiClient.getClient().create(ApiService.class);
apiService.getUser("username")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<User>() {
@Override
public void onSubscribe(Disposable d) {
// 订阅开始时的操作
}
@Override
public void onNext(User user) {
// 处理成功的响应
Log.d("API Response", user.toString());
}
@Override
public void onError(Throwable e) {
// 处理错误
Log.e("API Error", e.getMessage());
}
@Override
public void onComplete() {
// 订阅完成时的操作
}
});
}
}
通过这种方式,你可以使用RxJava和Retrofit进行网络请求,并在API调用完成后处理响应。
领取专属 10元无门槛券
手把手带您无忧上云