2017-07-14 79 views
0

我有一个视图模型,其中有一个实时数据变量。Kotlin,proguard,Android的体系结构组件

我的活动观察它以更新UI。

在调试中,它一切正常。当启用proguard时,它不再观察livedata的变化。

我检查过实时数据是否正确更新。但是,观察者回调从未被调用。

任何有关如何配置Proguard和什么可能是错误的提示?

我试图让我的包中类没有成功:

-keep class com.example.myapp.** { *; } 

这里是视图模型:

class SplashViewModelImpl : JapetViewModel(), SplashViewModel {  
    private val isTimeUp = MutableLiveData<Boolean>() 

    init { 
     isTimeUp.value = false 
     Observable.timer(2000L, TimeUnit.MILLISECONDS) 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe { isTimeUp.postValue(true) } 

    } 

    override fun isTimeUp(): LiveData<Boolean> = isTimeUp 
} 

而且活动:

class SplashActivity : MyBaseActivity() { 

    lateinit var viewModel: SplashViewModel 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_splash) 

     viewModel = kodein.with(this).instance() 

     // Working in debug 
     // viewModel.isTimeUp().observe(this, Observer(this::transitionIfTimeUp)) 

     // Working in debug too, tried this way of writing it too 
     viewModel.isTimeUp().observe(this, Observer<Boolean> { t -> transitionIfTimeUp(t) }) 

     // Also tried doing it with an object : Observer... without success either 
    } 

    private fun transitionIfTimeUp(isTimeUp: Boolean?) { 
     if (isTimeUp == null || !isTimeUp) return 

     startActivity<LoginActivity>() 
     finish() 
    } 
} 

编辑:依赖

testCompile "android.arch.persistence.room:testing:1.0.0-alpha3" 
androidTestCompile "android.arch.persistence.room:testing:1.0.0-alpha3" 

compile "android.arch.lifecycle:extensions:1.0.0-alpha3" 
compile "android.arch.lifecycle:reactivestreams:1.0.0-alpha3" 
kapt "android.arch.lifecycle:compiler:1.0.0-alpha3" 

compile "android.arch.persistence.room:runtime:1.0.0-alpha3" 
compile "android.arch.persistence.room:rxjava2:1.0.0-alpha3" 
kapt "android.arch.persistence.room:compiler:1.0.0-alpha3" 
+0

你使用的是什么依赖版本? – ianhanniballake

+0

@ianhanniballake查看编辑答案。任何可能是annotationProcessor而不是kapt的机会? (刚才注意到了) –

+0

刚试过用kapt代替,也不能用 –

回答

-1

我猜你正在寻找运营商Observable.interval而不是Observable.timer

您正在使用发出一个在指定时间后只有一次。但Observable.interval每隔指定的时间间隔连续发射。

+0

我不明白为什么我的代码能在调试模式下工作呢?我只想要那个事件一次。 –