Articles of rx android

改造“IllegalStateException:已经执行”

我有一个Retrofit网络调用,每隔5秒运行一次。 我目前的代码: Handler h = new Handler(); int delay = 5000; //milliseconds h.postDelayed(new Runnable() { public void run() { call.enqueue(new Callback() { @Override public void onResponse(Response response) { Log.d(“api”, “response: ” + response.body().getPosition().getLatitude().toString()); } @Override public void onFailure(Throwable t) { } }); h.postDelayed(this, delay); } }, delay); 这运行一次,但随后抛出以下内容: java.lang.IllegalStateException:已经执行。 at retrofit2.OkHttpCall.enqueue(OkHttpCall.java:52)at retrofit2.ExecutorCallAdapterFactory $ ExecutorCallbackCall.enqueue(ExecutorCallAdapterFactory.java:57)at orbyt.project.MyFragment […]

使用RxJava和Retrofit的定期HTTP请求

是否可以使用RxJava / RxAndroid和Retrofit执行定期的http请求,每x秒更新一次数据? 目前我正在使用一个每x秒触发的IntentService和Recursive Handler / Runnable。 我想知道我是否可以删除所有这些并让RxJava处理请求。 final RestClient client = new RestClient(); final ApiService service = client.getApiService(); public interface ApiService { @GET(“/athletes”) public Observable<List> getAthletes(); } service.getAthletes() .retry(3) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<List>() { @Override public void call(List athletes) { // Handle Success } }, new Action1() { @Override public void call(Throwable throwable) { […]

如何忽略错误并继续无限流?

我想知道如何忽略exception并继续无限流(在我的情况下,位置流)? 我正在获取当前用户位置(使用Android-ReactiveLocation ),然后将它们发送到我的API(使用Retrofit )。 在我的情况下,当在网络调用(例如超时)期间发生exception时,将调用onError方法并且流自行停止。 怎么避免呢? 活动: private RestService mRestService; private Subscription mSubscription; private LocationRequest mLocationRequest = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .setInterval(100); … private void start() { mRestService = …; ReactiveLocationProvider reactiveLocationProvider = new ReactiveLocationProvider(this); mSubscription = reactiveLocationProvider.getUpdatedLocation(mLocationRequest) .buffer(50) .flatMap(locations -> mRestService.postLocations(locations)) // can throw exception .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(); } RestService: public interface RestService { @POST(“/…/”) Observable […]

当使用Retrofit 2.0 Observables时出现错误,如何获取Response body

我正在使用Retrofit 2.0来进行返回Observables的api调用。 当呼叫完成并且响应符合预期时,一切正常。 现在假设我们有一个错误响应,它会抛出一个onError。 我想阅读响应正文,即使它是一个错误。 例 @FormUrlEncoded @POST(“tokenLogin”) Observable loginWithToken( @Field(“token”) String pin ); 当请求和响应有效时,我得到正确的observable,并在出现错误时按预期调用onError。 正确回应: { “status” : “authenticated” } Observable将其转换为正确的Observable,我可以将响应读作LoginResponse对象。 现在,错误响应如下: { “errorMessage” : “You need to take some xyz action” } 我想阅读该错误响应并将消息显示给用户。 我该怎么做呢?

何时取消订阅订阅

我有一个关于如何取消订阅可观察量的问题。 我有两个代码,我不确定哪一个更好。 示例1 – >流完成后取消订阅订阅者: Subscriber subscriber = new Subscriber() { @Override public void onCompleted() { progressdialog.dissmiss(); unsubscribe(); } @Override public void onError(Throwable e) { progressdialog.dissmiss(); } @Override public void onNext(String s) { // do something with data } } 示例2 – >销毁活动后取消订阅订阅: private void test(){ Subscriber subscriber = new Subscriber() { @Override public void […]

在Kotlin for Android中编程时使用RxAndroid或RxKotlin?

我将开始在我的Android项目中使用反应式编程。 我使用Kotlin作为主要语言,现在我想申请Rx。 我的第一选择是RxAndroid,但后来我注意到有RxKotlin。 据我所知,两者都是从RxJava分叉的,所以RxAndroid可能为android常见任务提供了一些API。 另一方面,RxKotlin支持lambas开箱即用,让我避免将kotlin与java混合。 在这种情况下哪一个是首选的库?

Android RX – Observable.timer只触发一次

所以我试图创建一个定期发射的可观察物,但由于某些我无法弄清楚的原因,它只发射一次。 谁能看到我做错了什么? Observable observable = Observable.timer(delay, TimeUnit.SECONDS, Schedulers.io()); subscription = observable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1() { @Override public void call(Long aLong) { searchByStockHelper.requestRemoteSearchByStock(); } }); 当前延迟设置为2

EditText有文本时启用button(RxAndroid)

RxJava / RxAndroid新手,我发现缺乏令人不安的例子。 作为一种使用Rx的方法,id喜欢尝试一些小工作。 基本上,如果一个EditText文本input到它,然后启用它下面的Button 。 我遇到了这个答案,但作者编辑并没有真正展示如何完全实现这样的东西。 从我所搜集的内容中,我可以使用RxBindings创build一个Observable如: Observable<CharSequence> observable = RxTextView.textChanges(mEditText); 据说我现在需要.subcribe()一个Observer来观察observable Observer到的变化,但我不确定这将如何完成。 另外,如果不使用RxBindings,如何创buildEditTexts Observable? 编辑:尽pipeRetrolambda存在,显示如何实现这个没有lambda(或两者)的答案将是有帮助的。

RxJava flatMapIterable与单

我试图整理一下我的代码, Single对于我来说是一个不错的select,因为我正在做一些只会发出一个结果的东西。 我有一个问题,因为我以前使用flatMapIterable采取我的回应(一个列表),并在每个项目上做一些事情。 我没有看到我怎么能用Single实现这个。 getListOfItems() .flatMapIterable(items -> items) .flatMap(item -> doSomethingWithItem()) .toList() 这工作得很好,如果getListOfItems返回一个Observable但如果我试着让它返回一个Single ,那么我不能做flatMapIterable ,不能看到替代,任何想法?

如何通过RxAndroid和Retrofit 2检索响应体?

我正在使用Retrofit 2(testing版4),我正在寻求从使用标准的Call响应到RxAndroid Observable响应。 我通过从Call<List<ExampleObject>>到Observable<List<ExampleObject>>的简单交换成功地切换了我的大部分调用。 我的一些电话使用Call<okhttp3.ResponseBody> ,这很好,但是当我换出Call ,遇到了一个错误: 03-03 15:21:44.237 27333-27333/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.app, PID: 27333 java.lang.IllegalArgumentException: Unable to create call adapter for rx.Observable<okhttp3.ResponseBody> for method AuthenticationService.getLoginForm at retrofit2.Utils.methodError(Utils.java:119) at retrofit2.MethodHandler.createCallAdapter(MethodHandler.java:52) at retrofit2.MethodHandler.create(MethodHandler.java:25) at retrofit2.Retrofit.loadMethodHandler(Retrofit.java:164) at retrofit2.Retrofit$1.invoke(Retrofit.java:145) at java.lang.reflect.Proxy.invoke(Proxy.java:393) at $Proxy6.getLoginForm(Unknown Source) at com.example.app.ui.fragment.LoginFragment.login(LoginFragment.java:214) at com.example.app.ui.fragment.LoginFragment.lambda$onContinue$1(LoginFragment.java:168) at com.example.app.ui.fragment.LoginFragment.access$lambda$1(LoginFragment.java) at com.example.app.ui.fragment.LoginFragment$$Lambda$4.onClick(Unknown Source) at android.view.View.performClick(View.java:5204) […]