我在应用程序中访问房间DAOs时遇到问题。即使我通过rxjava在后台线程中执行操作,也会出现此错误:
java。lang.IllegalStateException:无法访问主线程上的数据库,因为它可能会长时间锁定UI
我试图在应用程序中通过MVP使用干净的体系结构,我称之为在后台线程中进行该操作的用例。
更多信息:
涉及的类别包括:
主持人。JAVA
更新密码。从用例扩展而来的java。JAVA
最后是ReciphaLocalDataSource.java
我需要一些帮助,提前谢谢。
使用RxJava并不意味着你在做异步过程,事实上RxJava默认是同步的。
如果你想让一个操作异步,你需要使用操作符subscribeOn
,它将订阅你的observable在另一个线程中运行,或者使用observon指定你想要异步完成的操作。
一个例子
/**
* Once that you set in your pipeline the observerOn all the next steps of your pipeline will be executed in another thread.
* Shall print
* First step main
* Second step RxNewThreadScheduler-2
* Third step RxNewThreadScheduler-1
*/
@Test
public void testObservableObserverOn() throws InterruptedException {
Subscription subscription = Observable.just(1)
.doOnNext(number -> System.out.println("First step " + Thread.currentThread()
.getName()))
.observeOn(Schedulers.newThread())
.doOnNext(number -> System.out.println("Second step " + Thread.currentThread()
.getName()))
.observeOn(Schedulers.newThread())
.doOnNext(number -> System.out.println("Third step " + Thread.currentThread()
.getName()))
.subscribe();
new TestSubscriber((Observer) subscription)
.awaitTerminalEvent(100, TimeUnit.MILLISECONDS);
}
你可以在这里看到这两个例子https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/scheduler/ObservableAsynchronous.java
您正在使用的只是
,它接受一个已经创建/计算的值。基本上,你在调用线程上进行计算,然后把结果包装成一个可观察的。(我无法想象为什么这种逻辑上的误解会如此频繁地出现,因为没有一种主流语言会在普通括号之间延迟计算。)
改为这样做:
@Override
public Observable<Boolean> updateRecipes(List<JsonRecipe> jsonRecipes) {
return Observable.fromCallable(() -> {
mRecipeDb.runInTransaction(() ->
deleteOldAndInsertNewRecipesTransaction(jsonRecipes));
return true;
});
}
我正在尝试修复crashlytics在我发布给play store的应用程序中报告的一些错误 我查看了日志,但我不知道如何修复它。。。 实际上,我所有的rx代码都是这样处理错误的: 而WorkDao是: 但是我在崩溃报告中找不到我的错误日志。 我该怎么办?
问题内容: 如何将轮询线程传递给另一个线程进行处理。程序执行在具有主方法和线程池的控制器类中: 主类控制器 具有轮询类的线程的方法 具有proc类的线程的方法 轮询类和控制器类 我的任务和问题是: 1.控制器应同时处理轮询器和处理器线程,并且应仅调用轮询器和处理器线程 2.现在我的问题是如何使轮询线程等待3秒并并行通知处理器。 我得到如下错误: 这里如何实现异步处理? 问题答案: 你需要阅读的东西
我正在尝试使用下面的快速加载API 连接…等是完美的。 我确切地知道它在哪里失败 例外情况是 < code >线程“main”Java . lang . illegalstateexception中出现异常:示例失败。 这是我试图上传的表格。它是格式,当我通过记事本打开它时,它看起来像这样 为什么我会得到这个异常?我该如何改进?据我理解问题是< code > pstmtfld . setascii
我创建了以下EJB模块: 1)我的远程接口 2)实现接口的bean 3)接下来我创建了一个属性文件jboss-ejb-client.properties 在部署到wildfly之后,一切都很好。我得到以下信息: 4) 然后我创建了Java客户端 代码很简单。但是如果我运行客户端,我会收到以下错误消息: 我正在使用Netbean 8.2、JavaEE 7和Wildfly 10.1.0-Final。我
问题内容: 这是我的用法- 另外,我在http GET周围放置了一个finally块- 这是我的堆栈跟踪- 我正在使用Quartz计划监视Http端点的工作。这是我的连接池配置 Maven依赖..工件版本 编辑 -好吧,通过不关闭finally块中的CloseableHttpClient,问题解决了。有人能说出为什么这样吗? 如果关闭客户端,为什么连接池会关闭? 是上面的closeablehttp
这是我如何使用它 - 此外,我已经在超文本传输协议GET周围放置了一个最终块- 这是我的堆栈跟踪- 我正在使用Quartz来安排监控Httpendpoint的工作…这是我的连接池配置 马文依赖..神器版本 编辑-嗯,这个问题通过在最后一个块中不关闭CloseableHttp客户端而得到解决…有人能告诉我为什么它会这样吗?如果我关闭客户端,为什么连接池会关闭? 上面的closeablehttpcli