Android-分享一个检测网络状态的开源库(ReactiveNetwork)

计算机软件开发 2024-9-29 06:21:30 102 0 来自 中国
1.png 在一样寻常的Android项目开辟中,我们肯定会遇到须要检测用户装备的网络状态。防止用户没有网络的情况下,我们的应用没有提示。这里分享一个快速实现网络监听的开源库——ReactiveNetwork
ReactiveNetwork

ReactiveNetwork是一个利用RxJava Observables监听网络毗连状态和Internet毗连的开源库。它是利用相应式编程方法重写的网络事故库的继续者。库支持新旧网络监控计谋。最小 SDK 版本是9。
ReactiveNetwork引入

dependencies {  implementation 'com.github.pwittchen:reactivenetwork-rx2:3.0.8'}制止我发布博客,当前版本是3.0.8。开源库版本最新版本请看开源库文档。
ReactiveNetwork的利用

观察网络毗连:
ReactiveNetwork  .observeNetworkConnectivity(context)  .subscribeOn(Schedulers.io())  ... // anything else what you can do with RxJava  .observeOn(AndroidSchedulers.mainThread())  .subscribe(connectivity -> {      // do something with connectivity      // you can call connectivity.state();      // connectivity.type(); or connectivity.toString();  });连续观察互联网毗连:
ReactiveNetwork  .observeInternetConnectivity()  .subscribeOn(Schedulers.io())  .observeOn(AndroidSchedulers.mainThread())  .subscribe(isConnectedToInternet -> {      // do something with isConnectedToInternet value  });与OkHttp一起集成

private Observable<Response> getResponse(String url) {  OkHttpClient client = new OkHttpClient();  Request request = new Request.Builder().url(url).build();  return Observable.create(emitter -> {    try {        Response response = client.newCall(request).execute();        emitter.onNext(response);    } catch (IOException exception) {        emitter.onError(exception);    } finally {        emitter.onComplete();    }  });}我们须要毗连两个流:
ReactiveNetwork   .observeNetworkConnectivity(getApplicationContext())   .flatMap(connectivity -> {     if (connectivity.state() == NetworkInfo.State.CONNECTED) {       return getResponse("http://github.com");     }     return Observable.error(() -> new RuntimeException("not connected"));   })   .subscribeOn(Schedulers.io())   .observeOn(AndroidSchedulers.mainThread())   .subscribe(       response  -> /* handle response here */,       throwable -> /* handle error here */)   );与Retrofit一起集成

须要设置 Retrofit:
Retrofit retrofit = new Retrofit.Builder()   .baseUrl("https://api.github.com/")   .addCallAdapterFactory(RxJava2CallAdapterFactory.create())   .addConverterFactory(GsonConverterFactory.create())   .build();如你所见,我们须要RxJava2CallAdapterFactory在这里。接下来,我们须要利用 RxJavaSingle范例界说恰当的接口:
public interface GitHubService { @GET("users/{user}/repos") Single<List<Repo>> listRepos(@Path("user") String user);}并实例化服务:
GitHubService service = retrofit.create(GitHubService.class);接下来,每当我们毗连到网络时,我们想调用利用 Retrofit 界说的端点。我们可以这样做:
ReactiveNetwork   .observeNetworkConnectivity(getApplicationContext())   .flatMapSingle(connectivity -> service.listRepos("pwittchen"))   .subscribeOn(Schedulers.io())   .observeOn(AndroidSchedulers.mainThread())   .subscribe(       repos     -> /* handle repos here */,       throwable -> /* handle error here */   );ReactiveNetwork的肴杂设置

-dontwarn com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork-dontwarn io.reactivex.functions.Function-dontwarn rx.internal.util.**-dontwarn sun.misc.Unsafe
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-23 18:18, Processed in 0.163548 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表