Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用rxandroid和mvvm设计模式时出现NetworkOnMainThreadException_Android_Networking_Rx Android_Android Mvvm - Fatal编程技术网

使用rxandroid和mvvm设计模式时出现NetworkOnMainThreadException

使用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

我的代码有问题,引发NetworkOnMainThreadException。我正在尝试使用Android XML-RPC库将Android应用程序连接到Odoo

这就是我正在做的

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 }