标签: rx-java2

Android - 改造2 - 无法解析RxJava2CallAdapterFactory

我在我的应用程序中使用 Retrofit 2 和 rxjava 2。这些是我的 gradle 实现:

implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.4.0'

implementation 'io.reactivex.rxjava2:rxjava:2.2.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
Run Code Online (Sandbox Code Playgroud)

这是我的 API 连接类:

public class ApiConnection {
  private static String BaseUrl = "http://mysites.com/";
  private static Retrofit retrofit = null;

  public static Retrofit getClient() {
    Gson gson = new GsonBuilder()
      .setLenient()
      .create();

    if (retrofit == null) {
      retrofit = new Retrofit.Builder()
        .baseUrl(BaseUrl)
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build();
    }
    return retrofit;
  }
}
Run Code Online (Sandbox Code Playgroud)

我在这一行遇到错误:

RxJava2CallAdapterFactory
Run Code Online (Sandbox Code Playgroud)

这是错误:

Cannot resolve symbol 'RxJava2CallAdapterFactory
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题吗?

android retrofit2 rx-java2

0
推荐指数
1
解决办法
5764
查看次数

房间数据库观察者

在 Room 数据库中,我想添加一些观察者,其中的通知如下:删除、插入、更新。

我确实通过创建一个接口来实现这一点,然后适配器实现它。因此,每次一个数据库事务结束时,都会在适配器上执行一次匹配操作。

但我不确定这是否是正确的方法,也许 rxjava 有某种方法可以做到这一点?或者也许是 RecyclerView 中的 DiffUtil?

java android rx-java2 android-room

0
推荐指数
1
解决办法
4864
查看次数

无法为 io.reactivex.Single 创建调用适配器

我想通过改造和 rxjava 连接到服务器。当我使用 call 时它可以工作,一切都很好。但是当尝试使用 rxjava 时,它会遇到麻烦。错误文本:

无法找到 io.reactivex.Single 的调用适配器

在 build.gradle 中我实现了改造适配器。但我不知道问题是什么。这是我的等级:

implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation "android.arch.persistence.room:runtime:1.1.1"
annotationProcessor "android.arch.persistence.room:compiler:1.1.1"
Run Code Online (Sandbox Code Playgroud)

api客户端代码:

public class ApiClient {
public static final String BASE_URL="http://192.168.1.100/digikala/";
private static Retrofit retrofit=null;
public static Retrofit getClient(){
    if(retrofit==null){
        retrofit=new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .baseUrl(BASE_URL)
                .build();
    }

    return  retrofit;
}
Run Code Online (Sandbox Code Playgroud)

api服务代码:

public interface ApiService {

   @GET("readamazing.php")
   Single<List<Product>> getSingleProducts();
 }
Run Code Online (Sandbox Code Playgroud)

主要活动代码:

ApiService apiService=ApiClient.getClient().create(ApiService.class);
apiService.getSingleProducts().subscribeOn(Schedulers.newThread())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new SingleObserver<List<Product>>() {
        @Override
        public void …
Run Code Online (Sandbox Code Playgroud)

android observable retrofit2 rx-java2

0
推荐指数
1
解决办法
2652
查看次数

com.android.builder.packaging.DuplicateFileException:在APK META-INF/rxjava.properties中复制的重复文件

错误:任务':app:transformResourcesWithMergeJavaResForDebug'的执行失败.

com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException:在APK META-INF/rxjava.properties中复制的重复文件File1:D:\ Android\Android Studio\gradle\caches\modules- 2\files-2.1\io.reactivex.rxjava2\rxjava\2.0.2\cfccdd18cdfbe7b4773d42c9f3512eeafbe5cbf9\rxjava-2.0.2.jar File2:D:\ Android\Android Studio\gradle\_caches\modules-2\files-2.1\io .reactivex\rxjava\1.2.1\4e4cfa4adc74521d5966799fa5ab70b733552f68\rxjava-1.2.1.jar

rx-java2

-1
推荐指数
1
解决办法
904
查看次数

在rxjava中打开和克隆边界的缓冲区

我正在尝试使用一个缓冲区,在rxjava中打开和克隆边界,但我无法让它工作.我想做的是假设一个可观察的发射,0,1,2,3,0,1,3,0,3我想以{0,1,2,3},{0,1结束,3},{0,3}.

这是我到目前为止的代码:

PublishSubject openning = PublishSubject.create();
        openning.doOnNext(new Consumer() {
            @Override
            public void accept(@NonNull Object o) throws Exception {
                if(o.equals("0"))
                    openning.onNext(o);
            }
        });

        Observable<String> observableA = Observable.interval(1, TimeUnit.SECONDS).map(value -> String.valueOf(value  % 10));

        observableA.subscribe(openning);
        // TODO: Buffer by boundary
        observableA = observableA.buffer(openning, new Function<String, Observable<List<String>>>() {
            @Override
            public Observable<List<String>> apply(@NonNull String o) throws Exception {
                list.add(o);
                if (o.equals("0")) {
                    return Observable.just(list);
                } else {
                    list.add(o);
                    sb.append(o);
                    return Observable.never();
                }
            }
        }, new Callable() {
            @Override
            public Object call() throws Exception {
                return …
Run Code Online (Sandbox Code Playgroud)

java rx-java rx-java2

-1
推荐指数
1
解决办法
239
查看次数

Android:如何处理WorkManager Rx 的结果?

我正在使用 WorkManager (Android Jetpack) 和 Rx 开发一个 Android 应用程序。下面是 Worker 类。

class ImageRxWorker(
    appContext: Context,
    private val workerParams: WorkerParameters
) : RxWorker(appContext, workerParams) {

    override fun createWork(): Single<Result> = Single.create<Result> { emitter -

        // do the job

        emitter.onSuccess(Result.success())
    }

}
Run Code Online (Sandbox Code Playgroud)

它工作正常,没有问题。但我想知道的是我该如何处理结果?

class MainPresenter(
    private val view: MainActivity,
    private val workManager: WorkManager = WorkManager.getInstance()
) : MainContract.Presenter {

    override fun startWork(): Completable {
        view.showToastMessage(R.string.worker_started)

        return Completable.create { emitter ->
            val uploadWorkRequest = OneTimeWorkRequestBuilder<ImageRxWorker>().build()
            workManager.enqueue(uploadWorkRequest)
            emitter.onComplete() // This is not exit immediately. …
Run Code Online (Sandbox Code Playgroud)

android kotlin rx-java rx-java2 android-workmanager

-1
推荐指数
1
解决办法
3399
查看次数

RxJava2 switchIfEmpty并验证执行

所以..想象我有一个像这样的方法构造:

LocalDatabase:

public Observable<PoiObject> getPoiObject() {

    return Observable.defer {
        PoiObject object = poiDao.getPoiObject();
        if(object == null) {
            return Observable.empty();
        }
        else {
            return Observable.just(object);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我在其他地方有另一种方法,如下所示:

服务:

public Observable<PoiObject> getPoiObject() {
    return localDatabase.getPoiObject()
}

public Observable<PoiObject> getItFromWeb() {
    return restService.getObject()
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试将Service :: getPoiObject的调用链接到这样的Rx调用:

用例:

public Observable<SomeVM> getObject() {
    return service.getPoiObject()
        .switchIfEmpty(service.getItFromWeb())
}
Run Code Online (Sandbox Code Playgroud)

然后以下单元测试失败:

@Test
public void test_getObject() {
    Service service = mock()

    when(service.getPoiObject()).thenReturn(any());

    Observable<SomeVM> observable = usecase.getObject();
    verify(service).getPoiObject();
    verify(service, times(0)).getItFromWeb();
}
Run Code Online (Sandbox Code Playgroud)

为什么getItFromWeb()在清楚地执行时,前一个调用不为空(从service.getPoiObject()调用返回对象).是否还有其他策略可以测试switchIfEmpty?

android reactive-programming kotlin reactive rx-java2

-2
推荐指数
1
解决办法
1350
查看次数

Observable订阅rxjava时的NetworkOnMainThreadException

我正在使用Rxjava2,

flatmap在RxJava中使用以下结构:

Observable1.flatmap() 并返回Observable 2.

如下代码:

getApi().createUser(os, deviceToken)
            .compose(view.regisObserver())
            .subscribeOn(Schedulers.io())
            .flatMap(result -> {
                String user_token = result.data.user_token;
                getPreferenceStore().setAuthToken(user_token);

                setReadPolicy();

                Observable<ObjectDto<UserProfile>> obs = getApi().updateProfile(null, null, null);
                        obs.compose(view.regisObserver());

                return obs;
            })
            .subscribe(result-> {
                getPreferenceStore().setUserId(result.data.user_id);

            //                    view.onUpdateProfile();
            }, Throwable::printStackTrace);

@Override
public <T> ObservableTransformer<T, T> regisObserver() {
    return observable -> observable.compose(prepare())
            .doOnSubscribe(disposable -> showProgressDialog())
            .doOnComplete(this::closeProgressDialog)
            .doOnError(throwable -> {
                if (BuildConfig.DEBUG) {
                    throwable.printStackTrace();
                }
                showProgressDialog();
                closeProgressDialog();
            });

}
Run Code Online (Sandbox Code Playgroud)

代码编译没有错误.它在运行时出错NetworkErrorOnMainThread.我不知道如何解决它.

java android observable rx-java rx-java2

-3
推荐指数
1
解决办法
352
查看次数