我有一个rxJava2可观察对象,我想有条件地订阅它。场景i将进行网络调用,并且只有当设备连接到网络时才会调用subscribe()
。我想做下面的事情
observable.
subsribeWhenConditionIsMet(
if (connected to internet) {
mPresentation.showNetworkError();
return;
}
subscribe();
}
)
有什么建议吗?有没有更好的办法?
上网不仅仅是一个简单的条件,如果你想一想,它更像是一连串布尔值,有时是真的,有时是假的。
您想要的是创建一个可观察的,当internet连接可用时激发true。如果你在Android系统上,你可以在广播接收器中设置一个行为主体
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean hasInternet = wifi.isAvailable() || mobile.isAvailable()
subject.onNext(hasInternet);
}
}
你仍然需要以某种方式将主题传递给你的广播接收器,但这应该没什么大不了的。
然后,为了只在该主题返回true时订阅您的可观察对象,您可以这样做:
subject
.filter(hasInternet ->
hasInternet // Don't continue if hasInternet is false
)
.flatMap(o ->
yourObservable // At this point, return the observable cause we have internet
)
.subscribe() // subscribe
目前RxJava2中还没有这样的方法。但如果您使用的是kotlin,则可以使用扩展函数来实现。像下面那样声明它。
fun <T> Observable<T>.subscribeIf(predicate: () -> Boolean) {
if (predicate()) {
subscribe()
}
}
在通话时:
anyObservable()
.subscribeIf { isConnectedToInternet() }
额外的
如果你想处理回退情况,你可以像下面这样编写你的扩展,并使回退lambda可选,这样我们就可以在不需要的时候省略它。
fun <T> Observable<T>.subscribeIf(predicate: () -> Boolean, fallback: () -> Unit = {}) {
if (predicate()) {
subscribe()
} else {
fallback()
}
}
在通话时:
anyObservable()
.subscribeIf(
predicate = { isConnectedToInternet() },
fallback = { showError() }
)
}
注意:您也可以从Java调用它,请参考此链接https://stackoverflow.com/a/28364983/3544839
Node.js应用程序可以使用composer-client.BusinessNetworkConnection.onAPI调用从业务网络订阅事件。事件在业务网络模型文件中定义,并由交易处理函数文件中的指定交易处理。有关发布事件的更多信息,请参阅发布事件。 在你开始之前 在应用程序可以订阅事件之前,你必须定义一些事件和发送它们的交易。还必须部署业务网络,并且必须具有可连接到该业务网络的连接配置文件
说明 调用方法: $.f2eAct.yyue(el,options); 函数说明: Y阅功能,包含查询用户是否订阅,用户订阅,用户取消订阅 参数说明: 参数名 类型 说明 备注 el string DOM元素对象 必要 pcode int 订阅媒体的id 必要 gcode int 媒体用户分组id 必要 success function 查询是否订阅回调方法 无 confirm functio
订阅指过滤表(table)的规则,Canal 客户端发送给客户端订阅规则,那么服务端将会推送符合规则的表数据过来,采用正则匹配。 允许所有表:.\*\\\\..\*
问题内容: 我一直在尝试可以在网上找到的所有内容,但没有任何效果。希望大家能看到新的问题。这是我第一次使用ActionCable,在本地一切正常,但是当推送到heroku时。我的日志没有像我的开发服务器那样显示任何可操作的订阅: 在发送消息时,我确实看到了,但没有将它们追加,这是在猜测是否意味着未访问/调用该方法? 我确实在heroku的日志中注意到它说,开发人员正在localhost:3000监
我正在使用条纹结账来处理结账表单。 我在前面做了一个“取消订阅”按钮(使用react.js),我正在发送api调用以按ID取消订阅。 已成功取消订阅,但未将款项退还给客户? 例如: 我今天(每月)订阅了,明天我想取消订阅? 29天或30天的钱应该退给我,对吧? 节点JS代码: 我在Stripe仪表板上看到,当我删除订阅时,货币值没有改变。 多谢了。
我有一个BizSpark帐户,但我正在努力弄清楚作为我的免费Azure包的一部分,我实际上有权得到什么。套餐详情列于此处: http://www.windowsazure.com/en-us/offers/details?locale=en-us 我需要运行: 一个虚拟机(运行Linux)为网站供电 一个托管服务,为客户端软件(Windows Phone和Windows 8)提供数据库访问 一个托