Retrofit+Rxjava发起网络请求

淡淡的烟草味﹌ 2021-11-09 08:34 457阅读 0赞

Retrofit我们可以理解为OkHttp的加强版,它也是一个网络加载框架。底层是使用OKHttp封装的,准确来说网络请求的工作本质上是OkHttp完成,而 Retrofit 仅负责网络请求接口的封装。它的一个特点是包含了特别多注解,方便简化你的代码量。它的好处在于超级解耦,可以配置不同HttpClient来实现网络请求,如OkHttp、HttpClient…支持同步、异步和RxJava,还可以配置不同的反序列化工具来解析数据,如json、xml等等(这里Retrofit的过多介绍我就不多说啦,不懂的小伙伴可以在网上百度一下,去深入了解一下Retrofit的请求方法等)

那rxjava又是什么呢?
看看大神的博客你就知道rxjava是啥了Rxjava 入门教程

看完了Retrofit 和Rxjava,那么接下来我们就来了解了解两者的结合体Retrofit+Rxjava实现网络请求
首先写一个Javabean(天气类)

  1. package com.example.retrofit_net_demo;
  2. public class WeatherBean {
  3. private DataBean data;
  4. public DataBean getData() {
  5. return data;
  6. }
  7. public void setData(DataBean data) {
  8. this.data = data;
  9. }
  10. public static class DataBean {
  11. private String city;
  12. private String cold;
  13. private String temperature;
  14. public String getCity() {
  15. return city;
  16. }
  17. public void setCity(String city) {
  18. this.city = city;
  19. }
  20. public String getCold() {
  21. return cold;
  22. }
  23. public void setCold(String cold) {
  24. this.cold = cold;
  25. }
  26. public String getTemperature() {
  27. return temperature;
  28. }
  29. public void setTemperature(String temperature) {
  30. this.temperature = temperature;
  31. }
  32. }
  33. }

然后我们自定义一个接口

  1. package com.example.retrofit_net_demo;
  2. import retrofit2.http.GET;
  3. import retrofit2.http.Query;
  4. import rx.Observable;
  5. public interface RxWeatherService {
  6. //网络接口的使用是查询天气
  7. @GET("weather_mini")
  8. //此处回调返回的可为任意类型Observable<T>,不用自己去解析json数据
  9. Observable<WeatherBean> getMessage(@Query("city") String city);
  10. }

然后我从网上找了一个别人的接口来做这个demo的接口

  1. package com.example.retrofit_net_demo;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.util.AndroidException;
  5. import android.util.Log;
  6. import retrofit2.Call;
  7. import retrofit2.Callback;
  8. import retrofit2.Response;
  9. import retrofit2.Retrofit;
  10. import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
  11. import retrofit2.converter.gson.GsonConverterFactory;
  12. import rx.Scheduler;
  13. import rx.Subscriber;
  14. import rx.android.schedulers.AndroidSchedulers;
  15. import rx.schedulers.Schedulers;
  16. public class MainActivity extends AppCompatActivity {
  17. public static final String Api = "http://wthrcdn.etouch.cn/";
  18. public static final String TAG = "MainActivity-vv";
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_main);
  23. doRequestByRxRetrofit();
  24. }
  25. private void doRequestByRxRetrofit() {
  26. Retrofit retrofit = new Retrofit.Builder()
  27. .baseUrl(Api)
  28. //设置 Json 转换器
  29. .addConverterFactory(GsonConverterFactory.create())
  30. //RxJava 适配器
  31. .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
  32. .build();
  33. RxWeatherService rxWeatherService = retrofit.create(RxWeatherService.class);
  34. rxWeatherService.getMessage("北京")
  35. //IO线程加载数据
  36. .subscribeOn(Schedulers.io())
  37. //主线程显示数据
  38. .observeOn(AndroidSchedulers.mainThread())
  39. .subscribe(new Subscriber<WeatherBean>() {
  40. @Override
  41. public void onCompleted() {
  42. }
  43. @Override
  44. public void onError(Throwable e) {
  45. }
  46. @Override
  47. public void onNext(WeatherBean weatherBean) {
  48. Log.d(TAG, "onNext:温度为" + weatherBean.getData().getWendu() + " " + weatherBean.getData().getGanmao()
  49. + " city:" + weatherBean.getData().getCity());
  50. }
  51. });
  52. }
  53. }

在这里插入图片描述
有什么错误的话欢迎评论,不喜勿喷!!

发表评论

表情:
评论列表 (有 0 条评论,457人围观)

还没有评论,来说两句吧...

相关阅读

    相关 axios发起get请求

    axios用起来非常方便简洁。下边记录一下。 这里我就新建一个项目,axiostest.html里面就是写测试代码的,然后请求aa.txt里面的数据。这里面我就写了几个字母用