gpt4 book ai didi

android - RxAndroid 中如何观察网络变化

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:52 26 4
gpt4 key购买 nike

我正在使用给定的代码 here .

我将这些代码块作为类放在我项目的 util 包中。然后在主要 Activity 课上我写了这个..

class MenuActivity {

// Variable declaration
private final CompositeSubscription mConnectionSubscription = new CompositeSubscription();

@Override
protected void onCreate(Bundle savedInstanceState) {

// Some initialisation of UI elements done here

mConnectionSubscription.add(AppObservable.bindActivity(this, NetworkUtils.observe(this)).subscribe(new Action1<NetworkUtils.State>() {
@Override
public void call(NetworkUtils.State state) {
if(state == NetworkUtils.State.NOT_CONNECTED)
Timber.i("Connection lost");
else
Timber.i("Connected");
}
}));

}

我的目标是监视变化并在网络更改为 true false 时静态更改 MyApp 类中定义的变量 MyApp.isConnected。帮助将不胜感激。谢谢😄

最佳答案

你在另一个话题中问我答案。我回答晚了,因为我需要一些时间来开发和测试我认为足够好的解决方案。

我最近创建了名为 ReactiveNetwork 的新项目.

它是开源的,可在以下位置获得:https://github.com/pwittchen/ReactiveNetwork .

您可以将以下依赖项添加到您的 build.gradle 文件中:

dependencies {
compile 'com.github.pwittchen:reactivenetwork:x.y.z'
}

然后,您可以将x.y.z替换为最新的版本号。

之后,您可以通过以下方式使用库:

 ReactiveNetwork.observeNetworkConnectivity(context)        
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<ConnectivityStatus>() {
@Override public void call(Connectivity connectivity) {
if(connectivity.getState() == NetworkInfo.State.DISCONNECTED) {
Timber.i("Connection lost");
} else if(connectivity.getState() == NetworkInfo.State.CONNECTED) {
Timber.i("Connected");
}
}
});

如果你只想对单一类型的事件使用react,你也可以使用 RxJava 中的 filter(...) 方法。

您可以在 onResume() 方法中创建订阅,然后在 Activity 中的 onPause() 方法中取消订阅。

您可以在 GitHub 上的项目网站上找到更多使用示例和示例应用程序。

此外,您还可以阅读 NetworkInfo.State来自 Android API 的枚举,现在由库使用。

关于android - RxAndroid 中如何观察网络变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31098430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com