io.reactivex -> android.os.NetworkOnMainThreadException



Android Studio 3.6

在我的活动中:

private fun update(force: Boolean = false) {
if (!force) {
)
} else {
kycStateRepository.update()
}
repositoryProvider.account().update()
}

open fun updateIfNotFresh(): Completable {
return synchronized(this) {
if (!isFresh) {
update()
} else {
Completable.complete()
}
}
}

import io.reactivex.Completable
import io.reactivex.Observable
import io.reactivex.disposables.Disposable
import io.reactivex.rxkotlin.subscribeBy
import io.reactivex.subjects.CompletableSubject
override fun update(): Completable {
if (BuildConfig.DEBUG)
Log.d(TAG, "update:")
invalidate()
return synchronized(this) {
val resultSubject = updateResultSubject.let {
if (it == null) {
val new = CompletableSubject.create()
updateResultSubject = new
new
} else {
it
}
}
item = null
isLoading = true
val storedItemObservable =
if (isNeverUpdated) getStoredItemObervable() else Observable.empty()
updateDisposable?.dispose()
updateDisposable = storedItemObservable.concatWith(
getItem()
.map {
storeItem(it)
it
}
)
.subscribeBy(
onNext = { newItem: T ->
onNewItem(newItem)
},
onComplete = {
isLoading = false
updateResultSubject = null
resultSubject.onComplete()
},
onError = {
isLoading = false
errorsSubject.onNext(it)
updateResultSubject = null
resultSubject.onError(it)
}
)
resultSubject
}
}

但我在这行遇到错误:

.subscribeBy(

此处错误详细信息:

android.os.NetworkOnMainThreadException

05-09 22:53:13.639 D/gralloc_ranchu( 1768): gralloc_alloc: Creating ashmem region of size 17051648
05-09 22:53:13.639 D/EGL_emulation(12006): eglMakeCurrent: 0xdbb1a4e0: ver 2 0 (tinfo 0xdbb0f5f0)
05-09 22:53:13.656 D/OkHttp  (12006): <-- 200 OK http://some_url/GCRP32XEJFAA2DRABFWYRH5?include=external_system_ids,kyc_data (112ms)
05-09 22:53:13.656 D/OkHttp  (12006): Server: nginx/1.17.10
05-09 22:53:13.656 D/OkHttp  (12006): Date: Sat, 09 May 2020 19:53:13 GMT
05-09 22:53:13.656 D/OkHttp  (12006): Content-Type: application/vnd.api+json
05-09 22:53:13.656 D/OkHttp  (12006): Content-Length: 1791
05-09 22:53:13.656 D/OkHttp  (12006): Connection: keep-alive
05-09 22:53:13.656 D/OkHttp  (12006): X-Upstream: 9e4cd27d2457
05-09 22:53:13.656 D/OkHttp  (12006): Access-Control-Allow-Methods: GET, POST, PUT, PATCH, OPTIONS, DELETE
05-09 22:53:13.656 D/OkHttp  (12006): Access-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Signature
05-09 22:53:13.656 D/OkHttp  (12006): Access-Control-Allow-Credentials: true
05-09 22:53:13.656 D/OkHttp  (12006): Access-Control-Expose-Headers: Content-Length,Content-Range
05-09 22:53:13.656 D/OkHttp  (12006): {"data":{"id":"GCRP32XK4BLBRO3OLLRLWC2Z46RAEANUWU5BCGWNEJFAA2DRAid":"YGDMSPDXABBKH4VNN7ZSHBM5DMVL2OTU3NWG2C3ZE5IQVIWUSEWQ"}}}]}
05-09 22:53:13.657 D/OkHttp  (12006): <-- END HTTP (1791-byte body)
05-09 22:53:13.684 D/EGL_emulation(12006): eglMakeCurrent: 0xdbb1a4e0: ver 2 0 (tinfo 0xdbb0f5f0)
05-09 22:53:13.687 W/System.err(12006): android.os.NetworkOnMainThreadException
05-09 22:53:13.688 W/InputReader( 2026): Device has associated, but no associated display id.
05-09 22:53:13.688 W/System.err(12006):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1565)
05-09 22:53:13.688 W/InputReader( 2026): Device has associated, but no associated display id.
05-09 22:53:13.688 I/chatty  ( 2026): uid=1000(system) android.anim identical 7 lines
05-09 22:53:13.688 W/InputReader( 2026): Device has associated, but no associated display id.
05-09 22:53:13.688 W/System.err(12006):     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:389)
05-09 22:53:13.688 W/System.err(12006):     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
05-09 22:53:13.688 W/System.err(12006):     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
05-09 22:53:13.688 W/System.err(12006):     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
05-09 22:53:13.688 W/System.err(12006):     at java.net.Socket.connect(Socket.java:621)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.platform.AndroidPlatform.connectSocket(AndroidPlatform.java:69)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:238)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:158)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:256)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:134)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:113)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
05-09 22:53:13.688 W/System.err(12006):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
05-09 22:53:13.688 W/System.err(12006):     at org.tokend.sdk.tfa.TfaInterceptor.intercept(TfaInterceptor.kt:19)

您的observable应该在后台线程上订阅以进行网络调用。在RxJava中,您可以使用subscribeOn(Schedulers.io())。这意味着您的observable将在io调度器上订阅。io调度器通常用于进行网络呼叫操作

最新更新