标签: rx-android

使用Rxjava Android从Activity更新片段

我有一个简单的用例,其中:

  • Activity1创建一个fragment1

  • 创建后的fragment1通知活动它是否已创建并更新其activity1视图.

  • 获取通知更新fragment1视图后的activity1.

我正在使用rxandroid,sublibrary rxlifecycle组件和android,但我还在学习阶段,rx-lifecyclestackoverflow上甚至没有标记,所以我仍然在努力理解这个库的流程..

编辑

我不喜欢使用EventBus,就像每个人都大喊大叫做某事一样,所以Rxjava Observable方法会很有用

android android-fragments android-activity rx-android rx-binding

16
推荐指数
2
解决办法
4957
查看次数

使用Retrofit rxjava concatWith时堆栈溢出

我想使用rxjava Observable处理Retrofit中的分页.我听从了另一个问题的建议.

我有超过100个页面需要被提取,但链在第20页的页面失败并停止对logserv的进一步订阅以及logcat中的以下日志

04-04 04:12:11.766    2951-3012/com.example.app I/dalvikvm? threadid=28: stack overflow on call to Ljava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;.compareAndSet:ZLJJ
04-04 04:12:11.766    2951-3012/com.example.app I/dalvikvm? method requires 56+20+32=108 bytes, fp is 0x94b52350 (80 left)
04-04 04:12:11.766    2951-3012/com.example.app I/dalvikvm? expanding stack end (0x94b52300 to 0x94b52000)
04-04 04:12:11.766    2951-3012/com.example.app I/dalvikvm? Shrank stack (to 0x94b52300, curFrame is 0x94b548dc)
Run Code Online (Sandbox Code Playgroud)

有人知道为什么会这样吗?

更新:我知道这是由于递归而发生的,但是有一种更优雅的方式来处理改装和rxjava的分页吗?

java android rx-java retrofit rx-android

15
推荐指数
1
解决办法
3875
查看次数

可观察,仅在完成时重试错误和缓存

我们可以使用cache()运算符来避免多次执行长任务(http请求),并重用其结果:

Observable apiCall = createApiCallObservable().cache(); // notice the .cache()

---------------------------------------------
// the first time we need it
apiCall.andSomeOtherStuff()
               .subscribe(subscriberA);

---------------------------------------------
//in the future when we need it again
apiCall.andSomeDifferentStuff()
               .subscribe(subscriberB);
Run Code Online (Sandbox Code Playgroud)

第一次执行http请求,但第二次,因为我们使用了cache()运算符,请求将不会被执行,但我们将能够重用第一个结果.

第一个请求成功完成时,此工作正常.但是如果在第一次尝试中调用了onError,那么下次新订阅者订阅同一个observable时,将再次调用onError而不再尝试http请求.

我们要做的是,如果第一次调用onError,那么下次有人订阅同一个observable时,将从头开始尝试http请求.即,observable将仅缓存成功的api调用,即调用onCompleted的调用.

关于如何进行的任何想法?我们尝试使用retry()和cache()运算符没有太多运气.

rx-java rx-android

15
推荐指数
3
解决办法
4402
查看次数

如何使用RxJava/RxAndroid从Android服务更新UI

我有一个绑定服务,负责下载文件,因此它知道下载状态/进度.UI(片段或活动)必须显示/更新服务的下载进度.

实际上我认为常用的方法是使用BroadcastRecieverCallBack来自Activity.但我听说过使用RxJava(ReactiveX编程)和中介类(以及Dagger将其注入服务和活动),如下所述.

所以我的问题是如何使用这些东西来处理RxJava?任何代码示例?有没有比使用意图更有效的方法?

资源: 从Service更新UI的有效方式比意图更新?[见第一个答案更新]

android ui-thread android-service rx-java rx-android

15
推荐指数
2
解决办法
6821
查看次数

Rx - 收到onNext()后如何自动取消订阅?

如何在收到onNext()后自动取消订阅?

现在我用这个代码:

rxObservable
.compose(bindToLifecycle()) // unsubscribe automatically in onPause() if method was called in onResume()
.subscribe(new Subscriber<Object>() {
     ...
     @Override
     public void onNext(Object o) {
         unsubscribe();
     }
 });
Run Code Online (Sandbox Code Playgroud)

rx-java rx-android

15
推荐指数
1
解决办法
5592
查看次数

Rx 2 Android对于api调用有什么更好的Single或Observable?

当我们使用retrofit2与Rx进行API休息调用时,使用Single或Observable的最佳方法是什么?

public interface ApiService{

Single<Data> getDataFromServer();

Observable<Data> getDataFromServer();
}
Run Code Online (Sandbox Code Playgroud)

android rx-java rx-android retrofit2

15
推荐指数
2
解决办法
3674
查看次数

无法删除旧的javaCompile操作,可能是类名已更改

我正在学习RxJava.为此,我在RxJava上关注了droidcon谈话视频.教练为他正在使用的项目提供了回购链接.当我尝试在我的机器上构建项目时,我克隆了repo.我收到这个错误

错误:无法删除旧的javaCompile操作,可能是类名已更改?请提交错误报告,告知您正在使用的gradle版本.

这是gradle.build文件

    buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:2.5.0'
    }
}

repositories {
    mavenCentral()
    maven { url "https://github.com/alter-ego/advanced-android-logger/raw/develop/releases/" }
}

apply plugin: 'retrolambda'
apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "25.0.0"

    defaultConfig {
        applicationId "com.packtpub.apps.rxjava_essentials"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        jackOptions {
            enabled true
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    lintOptions {
        disable 'InvalidPackage' …
Run Code Online (Sandbox Code Playgroud)

java android gradle rx-java rx-android

15
推荐指数
2
解决办法
1158
查看次数

为什么订阅不在新线程中执行?

我有这样的任务:

Observable.just(getMessagesFromDb()).
    subscribeOn(Schedulers.newThread()).
    observeOn(AndroidSchedulers.mainThread()).
    subscribe(incomingMessages -> {
    //do something
    });
Run Code Online (Sandbox Code Playgroud)

getMessagesFromDb方法在哪里同步获取消息,而不在内部进行多线程处理.根据subscribeOn方法的RxAndroid文档:

在指定的Scheduler上异步订阅Observvers到此Observable

还有我的问题 - 为什么数据库请求在主线程上执行?如何异步进行?

rx-java rx-android

14
推荐指数
1
解决办法
3717
查看次数

在文本更改事件之前自动调用RxAndroid textview事件

我在编辑文本搜索中使用rxandroid进行去抖操作

我用了

private void setUpText() {
        _mSubscription = RxTextView.textChangeEvents(searchStation)//
                .debounce(500, TimeUnit.MILLISECONDS)// default Scheduler is Computation
                .observeOn(AndroidSchedulers.mainThread())//
                .subscribe(getOps().getdata());
    }
Run Code Online (Sandbox Code Playgroud)

和观察者一样

public Observer<TextViewTextChangeEvent> getdata()
    {

        return new Observer<TextViewTextChangeEvent>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {
                 e.printStackTrace();
            }

            @Override
            public void onNext(TextViewTextChangeEvent onTextChangeEvent) {
//                stationsugession(onTextChangeEvent.text().toString());

                //here i called link to get the data from the server
            }
        };
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是甚至在任何edittext更改发生之前调用链接.它没有调用textchange事件.我错过了什么我在这里做错了什么.我是rxandroid和rxjava的新手.

我用了

  compile 'io.reactivex:rxandroid:1.1.0'
    compile 'io.reactivex:rxjava:1.1.0'
    compile 'com.jakewharton.rxbinding:rxbinding:0.2.0'
Run Code Online (Sandbox Code Playgroud)

编辑:

它现在可以工作,我在我的逻辑中得到一个空指针获取列表..当我使用onError方法并放置一个堆栈跟踪我发现问题.

如果你想跳过初始调用,那么我们应该将.skip(1)调用 到你的订阅对象.[感谢Daniel Lew ] …

android rx-java rx-android

14
推荐指数
1
解决办法
8684
查看次数

获取Observable的最新值并立即发出

我正在尝试获取给定的最新值,Observable并在调用后立即将其发出.以下面的代码为例:

return Observable.just(myObservable.last())
    .flatMap(myObservable1 -> {
        return myObservable1;
    })
    .map(o -> o.x) // Here I want to end up with a T object instead of Observable<T> object
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为通过这样做,flatMap将发射myObservable1,然后必须发射,以达到map.我不知道是否可以做这样的事情.有没有人知道如何实现这一目标?谢谢

java reactive-programming rx-java rx-android

14
推荐指数
1
解决办法
4万
查看次数