Просмотр исходного кода

fix Can't create handler inside thread that has not called Looper.prepare ()

Xwite 3 лет назад
Родитель
Сommit
e84b20e7bb
1 измененных файлов с 13 добавлено и 3 удалено
  1. 13 3
      app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt

+ 13 - 3
app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt

@@ -30,6 +30,7 @@ import io.legado.app.model.webBook.WebBook
 import io.legado.app.utils.isContentScheme
 import io.legado.app.utils.postEvent
 import io.legado.app.utils.toastOnUi
+import io.legado.app.utils.runOnUI
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers.IO
 
@@ -274,7 +275,11 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
     fun <T> importOrDownloadWebFile(webFile: WebFile, success: ((T) -> Unit)?) {
        bookSource ?: return
        execute {
-           callBack?.onWebFileProcessStart()
+           callBack?.run {
+               runOnUI {
+                   onWebFileProcessStart()
+               }
+           }
            if (webFile.isSupported) {
                val book = LocalBook.importFileOnLine(webFile.url, webFile.name, bookSource)
                changeToLocalBook(book)
@@ -286,8 +291,13 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
        }.onError {
            context.toastOnUi("ImportWebFileError\n${it.localizedMessage}")
        }.onFinally {
-            callBack?.onWebFileProcessFinally()
-        }
+           callBack?.run {
+               runOnUI {
+                   onWebFileProcessFinally()
+               }
+           }
+
+       }
     }
 
     fun changeTo(source: BookSource, book: Book, toc: List<BookChapter>) {