使用rxandroid和mvvm设计模式时出现NetworkOnMainThreadException
我的代码有问题,引发NetworkOnMainThreadException。我正在尝试使用Android XML-RPC库将Android应用程序连接到Odoo 这就是我正在做的使用rxandroid和mvvm设计模式时出现NetworkOnMainThreadException,android,networking,rx-android,android-mvvm,Android,Networking,Rx Android,Android Mvvm,我的代码有问题,引发NetworkOnMainThreadException。我正在尝试使用Android XML-RPC库将Android应用程序连接到Odoo 这就是我正在做的 class OdooServiceImpl : OdooService { /* This is the only function doing network operation*/ override fun userAuthenticate( host: String, login: String
class OdooServiceImpl : OdooService {
/* This is the only function doing network operation*/
override fun userAuthenticate(
host: String,
login: String,
password: String,
database: String
): Single<Int> {
val client = XMLRPCClient("$host/xmlrpc/2/common")
val result =
client.call("login", database, login, password)
return Single.just(result as Int)
}}
当我运行应用程序时,这是一条抛出错误的线
odooViewModel = ViewModelProviders.of(this, viewModelFactory).get(OdooViewModel::class.java)
我在这里遗漏了什么???罪魁祸首在这里:
val result = client.call("login", database, login, password)
return Single.just(result as Int)
在主线程上设置Rx链时,执行生成结果的调用。您必须确保在实际订阅时完成网络调用(在io()
)。一种解决方案可能是返回一个Single.fromCallable
:
return Single.fromCallable { client.call("login", database, login, password) as Int }
val result = client.call("login", database, login, password)
return Single.just(result as Int)
return Single.fromCallable { client.call("login", database, login, password) as Int }