詹子聪 пре 5 година
родитељ
комит
4abb429d1f

+ 36 - 1
app/src/main/java/com/miekir/newmvp/ui/home/article/presenter/AutoPresenter.kt

@@ -1,13 +1,48 @@
 package com.miekir.newmvp.ui.home.article.presenter
 
+import com.miekir.common.utils.LogTool
 import com.miekir.mvp.presenter.BasePresenterKt
+import com.miekir.newmvp.ui.home.IArticleView
+import com.rxjava.rxlife.RxLife
+import io.reactivex.Observable
+import io.reactivex.ObservableEmitter
+import io.reactivex.ObservableOnSubscribe
+import io.reactivex.schedulers.Schedulers
+
+class AutoPresenter<V : IArticleView> : BasePresenterKt<V>() {
 
-class AutoPresenter : BasePresenterKt() {
     fun doWork() {
+        //showProgress();
+        val disposable = Observable.create(ObservableOnSubscribe { emitter: ObservableEmitter<String?> ->
+            try {
+                Thread.sleep(5000)
+            } catch (e: Exception) {
+                e.printStackTrace()
+            }
+            emitter.onNext("")
+            emitter.onComplete()
+        } as ObservableOnSubscribe<String?>)
+        .subscribeOn(Schedulers.io())
+        .`as`(RxLife.asOnMain(this))
+        .subscribe({ next: String? ->
+            LogTool.d("MainPresenter", "onNext thread is: " + Thread.currentThread().name)
+            view?.onArticleResult("result from kotlin")
+            //post(Consumer<IArticleView> { view: IArticleView -> view.onArticleResult("result") })
+        }) { error: Throwable ->
+            hideProgress()
+            LogTool.d(javaClass.name, error.message)
+        }
+
+        mBackDisposableList.add(disposable)
+
         launchTask({
             //协程体
         }, {
             //异常回调
         })
     }
+
+    override fun onInit() {
+
+    }
 }

+ 3 - 0
common/build.gradle

@@ -53,6 +53,9 @@ dependencies {
 
     //rxjava2 支持在主线程回调 https://github.com/liujingxing/rxjava-RxLife
     api 'com.ljx.rxlife2:rxlife-rxjava:2.0.0'
+    // 开启协程,并自动管理协程生命周期,在页面销毁时,自动关闭协程
+    // 自动捕获协程异常,通过回调可拿到异常信息
+    // 可监听协程开启及结束 https://github.com/liujingxing/RxLife-Coroutine
     api 'com.ljx.rxlife:rxlife-coroutine:2.0.0'
 
     // 带行号的Log

+ 0 - 1
mvp/src/main/java/com/miekir/mvp/presenter/BasePresenter.java

@@ -55,7 +55,6 @@ public abstract class BasePresenter<V extends IView> extends ScopeViewModel {
      * @param consumer 要执行的操作
      */
     public void post(Consumer<? super V> consumer) {
-
         Optional.ofNullable(getView()).ifPresent(consumer);
     }
 

+ 2 - 2
mvp/src/main/java/com/miekir/mvp/presenter/BasePresenterKt.kt

@@ -1,12 +1,12 @@
 package com.miekir.mvp.presenter
 
-import androidx.lifecycle.ViewModel
 import androidx.lifecycle.rxLifeScope
+import com.miekir.mvp.view.IView
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Job
 
 //open class BasePresenterKt : AndroidViewModel(Utils.getApp()) {
-open class BasePresenterKt : ViewModel() {
+abstract class BasePresenterKt<V : IView>: BasePresenter<V>() {
     /**
      * 所有网络请求都在 rxLifeScope 域中启动,当页面销毁时会自动
      * 取消所有协程