nekocode / create-android-kotlin-app

Create kotlin android project with one line of command.
Apache License 2.0
1.6k stars 209 forks source link

继承BaseViewInterface的疑问 #8

Closed berial closed 8 years ago

berial commented 8 years ago

我在自己写的Presenter里定义了ViewInterface并在其中定义了一系列方法,在Fragment中实现了ViewInteface并重写了方法,但是所有的方法都不在main线程里,而是在一个RxComputationThreadPool中,请问该如何解决

nekocode commented 8 years ago

@Berial ,能提供更详细的问题描述么(例如代码)

berial commented 8 years ago
class RegisterFragment: BaseFragment(), RegisterPresenter.ViewInterface {

    overide fun setPhoneError(error: String) {
        etPhone.error = error 
    }
}

class RegisterPresenter(val view: ViewInterface): Presenter(view) {

    interface ViewInterface {
        fun setPhoneError(error: String)
    }

    // 获取验证码
    fun getPcode() {
        ...
        view.setPhoneError("手机号错误")
    }
}
nekocode commented 8 years ago

@Berial 你在哪里调用的 getPcode() ?感觉是你使用 RxJava 有误,没有在 UI 线程进行订阅。

还有就是,新的版本中的 Presenter 已经改为使用 Fragment 实现了,你的代码透露了你不是使用 0.8.x 版本的 kotgo。

使用 Fragment 构建 Presenter

berial commented 8 years ago

卧槽果然,之前是在onViewCreated里写的: RxView.clicks(btnGetPcode) .debounce(150, TimeUnit.MILLISECONDS) .subsribe { presenter.getPcode() }

把subsribe改成onUI就妥了

nekocode commented 8 years ago

OK~