RxJava file.createNewFile()始终返回TRUE

我想在
Android上使用RxJava创建一个新文件,如下所示:

public Observable<Boolean> createRx(String name) {

    return Observable.just(name)
        .map(new Func1<String, Boolean>() {
            @Override
            public Boolean call(String s) {
                File newFile = new File(localPath + "/" + s);

                try {
                    return newFile.createNewFile();
                } catch (IOException e) {
                    throw Exceptions.propagate(e);
                }
            }
        });
}

要正常创建新文件,如下所示:

public boolean createNonRx(String name) {

    boolean ret = false;

    try {
        File newFile = new File(localPath + "/" + name);
        ret = newFile.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return ret;
}

我的JUnitTest代码和TestReport:

@Test
public void testCreateRx() throws Exception { // FAIL!
    TestSubscriber<Boolean> testSubscriber = new TestSubscriber<>();

    source.createRx("JunitTest_Create_Rx").subscribe(testSubscriber);
    testSubscriber.assertNoErrors();
    testSubscriber.assertReceivedOnNext(Arrays.asList(Boolean.TRUE)); //PASS!

    source.createRx("JunitTest_Create_Rx").subscribe(testSubscriber);
    testSubscriber.assertNoErrors();
    testSubscriber.assertReceivedOnNext(Arrays.asList(Boolean.FALSE)); //FAIL!
    //expected to be [false] (Boolean) but was: [true] (Boolean)
}


@Test
public void testCreateNonRx() {  // PASS!
    boolean fstRet = source.createNonRx("JunitTest_LocalDataSource_Create_Non_Rx");
    assertTrue(fstRet);

    boolean secRet = source.createNonRx("JunitTest_LocalDataSource_Create_Non_Rx");
    assertFalse(secRet);
}

我是RxJava的新手,我的代码有问题吗?

当我尝试创建现有文件时,为什么对createRx()的调用返回TRUE?

谢谢你的帮助.

最佳答案 订阅者和观察者不应该被重用 – 每次订阅新订阅者并告诉我们你得到了什么

点赞