首页 > 解决方案 > 使用 RxJava 返回整数 - subscribeOn 的问题

问题描述

@NonNull
private final NoteDao noteDao;

@Inject
public NoteRepository(@NonNull NoteDao noteDao) {
    this.noteDao = noteDao;
}

试图完成这个从 Sqlite 数据库返回一个 int PK 的方法。

    private void insert(Note note) {

    Log.d(TAG, "saveNote: called.");
    try {
        noteDao.insert(note)
                . map(new Function<Long, Integer>() {
                    @Override
                    public Integer apply(Long aLong) throws Exception {
                        long l = aLong;
                        return (int)l;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe((new io.reactivex.functions.Consumer<Integer>() {
                    @Override
                    public void accept(Integer integerResource) {
                        // work with integerResource
                        sqCbtId = integerResource;
                    }
                })); new io.reactivex.functions.Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable error) {
                        // report the error
                    }
                };
    } catch (Exception e) {
        e.printStackTrace();
    }

* : java.lang.InstantiationException: java.lang.Class 没有零参数构造函数*

标签: androidmvvmrx-javaandroid-livedata

解决方案


尝试这个:

private void insert(Note note) {

    Log.d(TAG, "saveNote: called.");

    noteDao.insert(note)
            .map(new Function<Long, Integer>() {
                @Override
                public Integer apply(Long aLong) throws Exception {
                    long l = aLong;
                    return (int)l;
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new io.reactivex.functions.Consumer<Integer>() {
                @Override
                public void accept(Integer integerResource) {
                    // work with integerResource
                }
            }, new io.reactivex.functions.Consumer<Throwable>() {
                @Override
                public void accept(Throwable error) {
                    // report the error
                }
            });
}

推荐阅读