Android版&Kotlin版RxJava2+Retrofit2+OkHttp3的基础,flutter蓝牙开发

//获取豆瓣Top250 榜单

@GET(“top250”)

Call getTop250 (@Query(“start”) int start , @Query(“count”) int count);

@FormUrlEncoded

@POST(“top250”)

Call getTop250 (@Field(“start”) int start , @Field(“count”) int count);

}

使用 POST 方式时需要注意两点:

  • 必须加上 @FormUrlEncoded标签,否则会抛异常。

  • 必须要有参数,否则会抛异常, 源码抛异常的地方如下:

if (isFormEncoded && !gotField) {

throw methodError(“Form-encoded method must contain at least one @Field.”);

}

4.用 Retrofit 创建 接口实例 MoiveService 并且调用接口中的方法进行网络请求:

异步方式请求:

//获取接口实例

MovieService movieService = retrofit.create(MovieService.class);

//调用方法得到一个Call

Call call = movieService.getTop250(0,20);

//进行网络请求

call.enqueue(new Callback() {

@Override

public void onResponse(Call call, Response response) {

mMovieAdapter.setMovies(response.body().subjects);

mMovieAdapter.notifyDataSetChanged();

}

@Override

public void onFailure(Call call, Throwable t) {

t.printStackTrace();

}

});

同步方式请求: 返回一个Response

Response response = call.execute();

二,配合RxJava 使用:
  1. 更改定义的接口,返回值不再是一个 Call ,而是返回的一个 Observble:

public interface MovieService {

//获取豆瓣Top250 榜单

@GET(“top250”)

Observable getTop250(@Query(“start”) int start, @Query(“count”)int count);

}

2.创建 Retrofit 的时候添加如下代码:

addCallAdapterFactory(RxJava2CallAdapterFactory.create())

3.添加转换器Converter(将 json 转为 JavaBean):

addConverterFactory(GsonConverterFactory.create())

举实际项目中使用的例子:

retrofit = new Retrofit.Builder()

.client(okHttpBuilder.build())

.addConverterFactory(GsonConverterFactory.create())

.addCallAdapterFactory(RxJava2CallAdapterFactory.create())

.baseUrl(BASE_URL)

.build();

4.Activity 或者 Fragment 中传入 DisposableObserver 建立订阅关系:

Subscription subscription = movieService.getTop250(0,20)

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new DisposableObserver() {

@Override

public void onComplete() {

}

@Override

public void onError(Throwable e) {

}

@Override

public void onNext(MovieSubject movieSubject) {

mMovieAdapter.setMovies(movieSubject.subjects);

mMovieAdapter.notifyDataSetChanged();

}

});

5.加入RxJava的好处:

  • 加入 RxJava 后的网络请求,返回不再是一个 Call ,而是一个 Observable。

  • 在Activity / Fragment 中传入一个Subscriber 建立订阅关系,就可以在 onNext 中处理结果了。

  • RxJava 的好处是帮我处理 线程之间的切换,我们可以在指定 订阅的在哪个线程,观察在哪个线程。

  • 可以 通过操作符 进行数据变换。

  • 整个过程都是链式的,简化逻辑。其中FlatMap 操作符 还可以解除多层嵌套的问题。

RxJava 很强大,能帮我处理很多复杂的场景,如果熟练使用的话,那么能提升我们的开发效率。

三,加入 OkHttp 配置:

通过OkHttpClient 可以配置很多东西,比如 链接超时时间,缓存,拦截器 等等。代码如下:

OkHttpClient.Builder builder = new OkHttpClient.Builder();

builder.connectTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS);//连接 超时时间

builder.writeTimeout(DEFAULT_TIME_OUT,TimeUnit.SECONDS);//写操作 超时时间

builder.readTimeout(DEFAULT_TIME_OUT,TimeUnit.SECONDS);//读操作 超时时间

builder.retryOnConnectionFailure(true);//错误重连

// 添加公共参数拦截器

BasicParamsInterceptor basicParamsInterceptor = new BasicParamsInterceptor.Builder()

.addHeaderParam(“userName”,“”)//添加公共参数

.addHeaderParam(“device”,“”)

.build();

builder.addInterceptor(basicParamsInterceptor);

// 创建Retrofit

mRetrofit = new Re

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值