RxAndroid 中如何观察网络变化
How to observe network changes in RxAndroid
我正在使用给定的代码 here。
我将这些代码块作为 classes 放在我项目的 util 包中。然后在主要 activity class 我写了这个..
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 class 中定义的变量 MyApp.isConnected。帮助将不胜感激。谢谢
尝试使用rxnetwork-android:
public class MainActivity extends AppCompatActivity{
private Subscription sendStateSubscription;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Observable<RxNetwork.State> sendStateStream =
RxNetwork.stream(this);
sendStateSubscription = AppObservable.bindActivity(
this, sendStateStream
).subscribe(new Action1<RxNetwork.State>() {
@Override public void call(RxNetwork.State state) {
if(state == RxNetwork.State.NOT_CONNECTED)
Timber.i("Connection lost");
else
Timber.i("Connected");
}
});
}
@Override protected void onDestroy() {
sendStateSubscription.unsubscribe();
sendStateSubscription = null;
super.onDestroy();
}
}
你在另一个话题中问我答案。我回答晚了,因为我需要一些时间来开发和测试我认为足够好的解决方案。
我最近创建了一个名为 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");
}
}
});
如果你只想对单一类型的事件做出反应,你也可以使用 RxJava 的 filter(...)
方法。
您可以在 onResume()
方法中创建订阅,然后在 Activity.
中的 onPause()
方法中取消订阅
您可以在 GitHub 上的项目网站上找到更多使用示例和示例应用程序。
此外,您可以从 Android API 中阅读有关 NetworkInfo.State 枚举的信息,它现在已被库使用。
我正在使用给定的代码 here。
我将这些代码块作为 classes 放在我项目的 util 包中。然后在主要 activity class 我写了这个..
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 class 中定义的变量 MyApp.isConnected。帮助将不胜感激。谢谢
尝试使用rxnetwork-android:
public class MainActivity extends AppCompatActivity{
private Subscription sendStateSubscription;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Observable<RxNetwork.State> sendStateStream =
RxNetwork.stream(this);
sendStateSubscription = AppObservable.bindActivity(
this, sendStateStream
).subscribe(new Action1<RxNetwork.State>() {
@Override public void call(RxNetwork.State state) {
if(state == RxNetwork.State.NOT_CONNECTED)
Timber.i("Connection lost");
else
Timber.i("Connected");
}
});
}
@Override protected void onDestroy() {
sendStateSubscription.unsubscribe();
sendStateSubscription = null;
super.onDestroy();
}
}
你在另一个话题中问我答案。我回答晚了,因为我需要一些时间来开发和测试我认为足够好的解决方案。
我最近创建了一个名为 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");
}
}
});
如果你只想对单一类型的事件做出反应,你也可以使用 RxJava 的 filter(...)
方法。
您可以在 onResume()
方法中创建订阅,然后在 Activity.
onPause()
方法中取消订阅
您可以在 GitHub 上的项目网站上找到更多使用示例和示例应用程序。
此外,您可以从 Android API 中阅读有关 NetworkInfo.State 枚举的信息,它现在已被库使用。