• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

RxJava+Retrofit+OkHttp的使用

武飞扬头像
灰太狼@
帮助1

1.导入依赖

  1.  
    //RxJava
  2.  
    implementation 'io.reactivex:rxjava:1.1.3'
  3.  
    //RxAndroid
  4.  
    implementation 'io.reactivex:rxandroid:1.1.0'
  5.  
    //retrofit
  6.  
    implementation 'com.squareup.retrofit2:retrofit:2.0.0'
  7.  
    //retrofit依赖Gson
  8.  
    implementation 'com.squareup.retrofit2:converter-gson:2.0.0'
  9.  
    //OkHttp
  10.  
    implementation 'com.squareup.okhttp3:okhttp:3.2.0'
  11.  
    //retrofit依赖RxJava
  12.  
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.0'

2.那我们的地址测试

随机头像输出 - 优启梦免费API数据接口调用服务平台 (uomg.com)学新通https://api.uomg.com/doc-rand.avatar.html

 3.根据我们的内容创建一个相对应的类

  1.  
    public class Data {
  2.  
     
  3.  
    private int code;
  4.  
    private String imgurl;
  5.  
     
  6.  
    public int getCode() {
  7.  
    return code;
  8.  
    }
  9.  
     
  10.  
    public void setCode(int code) {
  11.  
    this.code = code;
  12.  
    }
  13.  
     
  14.  
    public String getImgurl() {
  15.  
    return imgurl;
  16.  
    }
  17.  
     
  18.  
    public void setImgurl(String imgurl) {
  19.  
    this.imgurl = imgurl;
  20.  
    }
  21.  
     
  22.  
    }

4.编写我们的接口类

  1.  
    public interface DataService {
  2.  
     
  3.  
     
  4.  
    //get请求 , 不再调用原来的Call,而是采用 Observable
  5.  
    @GET("api/rand.avatar")
  6.  
    Observable<Data> getJsonData(@Query("sort") String sort, @Query("format") String json);
  7.  
     
  8.  
    // //get请求
  9.  
    // @GET("api/rand.avatar")
  10.  
    // Call<Data> getJsonData(@Query("sort") String sort,@Query("format") String json);
  11.  
    }

5.编写工具类

  1.  
    public class RetrofitServiceManager {
  2.  
     
  3.  
    private final OkHttpClient okHttpClient;
  4.  
    private final Retrofit retrofit;
  5.  
     
  6.  
    private RetrofitServiceManager() {
  7.  
     
  8.  
    //创建一个okHttpClient实例
  9.  
    okHttpClient = new OkHttpClient.Builder()
  10.  
    .connectTimeout(10, TimeUnit.SECONDS)//连接超时时间
  11.  
    .writeTimeout(30, TimeUnit.SECONDS)//设置写入操作超时时间
  12.  
    .readTimeout(30, TimeUnit.SECONDS)//设置读操作超时时间
  13.  
    .build();
  14.  
     
  15.  
    //创建一个retrofit实例
  16.  
    retrofit = new Retrofit.Builder()
  17.  
    .client(okHttpClient)//设置使用okhttp网络请求
  18.  
    .baseUrl("https://api.uomg.com/")//设置服务器路径
  19.  
    .addConverterFactory(GsonConverterFactory.create())//添加转化库,默认是Gson
  20.  
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//添加回调库,采用RxJava
  21.  
    .build();
  22.  
     
  23.  
    }
  24.  
     
  25.  
     
  26.  
    private static class SingletonHolder {
  27.  
    private static final RetrofitServiceManager INSTANCE = new RetrofitServiceManager();
  28.  
    }
  29.  
     
  30.  
    /*
  31.  
    * 获取RetrofitServiceManager
  32.  
    **/
  33.  
    public static RetrofitServiceManager getInstance() {
  34.  
    return SingletonHolder.INSTANCE;
  35.  
    }
  36.  
     
  37.  
     
  38.  
    public <T> T create(Class<T> service) {
  39.  
    return retrofit.create(service);
  40.  
    }
  41.  
    }

6.将我们的处理过程封装起来

  1.  
    public class HttpEngine {
  2.  
     
  3.  
    private static DataService dataService = RetrofitServiceManager.getInstance().create(DataService.class);
  4.  
     
  5.  
    /*
  6.  
    * 获取随机网络头像
  7.  
    * **/
  8.  
    public static void getDatatouxiang(String sort, String json, Observer<Data> observer) {
  9.  
    setSubscribe(dataService.getJsonData(sort, json), observer);
  10.  
    }
  11.  
     
  12.  
    private static <T> void setSubscribe(Observable<T> observable, Observer<T> observer) {
  13.  
    observable.subscribeOn(Schedulers.io())
  14.  
    .subscribeOn(Schedulers.newThread())//子线程访问网络
  15.  
    .observeOn(AndroidSchedulers.mainThread())//回调到主线程
  16.  
    .subscribe(observer);
  17.  
    }
  18.  
    }

7.编写我们的main_activity类

  1.  
    public class MainActivity extends AppCompatActivity {
  2.  
     
  3.  
    @Override
  4.  
    protected void onCreate(Bundle savedInstanceState) {
  5.  
    super.onCreate(savedInstanceState);
  6.  
    setContentView(R.layout.activity_main);
  7.  
     
  8.  
    initData();//调用方法启动
  9.  
    }
  10.  
     
  11.  
    private void initData() {
  12.  
    //调用封装好的retrofit请求方法
  13.  
    HttpEngine.getDatatouxiang("动漫女", "json", new Observer<Data>() {
  14.  
    @Override
  15.  
    public void onCompleted() {
  16.  
    Log.i("getAttributionTag()"," //完成");
  17.  
    }
  18.  
    @Override
  19.  
    public void onError(Throwable e) {
  20.  
    //失败
  21.  
    Log.i("retrofit==111=", "请求错误:" e.getMessage());
  22.  
    }
  23.  
    @Override
  24.  
    public void onNext(Data data) {
  25.  
    //成功
  26.  
    Log.i("retrofit==222=", data.getCode() "---" data.getImgurl());
  27.  
    }
  28.  
     
  29.  
    });
  30.  
    }
  31.  
    }

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcceck
系列文章
更多 icon
同类精品
更多 icon
继续加载