我正在使用在Google I/O 2018上呈现的Android导航,似乎我可以通过绑定到某个视图或使用NavHost从Fragment获取它来使用它.但我需要的是根据几个条件从我的第一个片段导航到ViewModel中的另一个特定视图.因为ViewModel,我延伸AndroidViewModel,但我不明白下一步该怎么做.我无法转换getApplication为Fragment/Activity而我无法使用NavHostFragment.此外,我不能只导航到导航,onClickListener因为startFragment只包含一个导航ImageView.我该如何导航ViewModel?
class CaptionViewModel(app: Application) : AndroidViewModel(app) {
private val dealerProfile = DealerProfile(getApplication())
val TAG = "REGDEB"
fun start(){
if(dealerProfile.getOperatorId().isEmpty()){
if(dealerProfile.isFirstTimeLaunch()){
Log.d(TAG, "First Time Launch")
showTour()
}else{
showCodeFragment()
Log.d(TAG, "Show Code Fragment")
}
}
}
private fun showCodeFragment(){
//??
}
private fun showTour(){
//??
}
}
Run Code Online (Sandbox Code Playgroud)
我的片段
class CaptionFragment : Fragment() {
private lateinit var viewModel: CaptionViewModel
private val navController by …Run Code Online (Sandbox Code Playgroud) 我正在向我的服务器进行 POST。结果是 204/成功代码,结果正文为空。java.util.NoSuchElementException 在服务器返回结果后立即引发。我的猜测是因为响应不包含正文(Void),但我非常不确定
我的界面
@POST("register/")
fun register(@Body phone: PhoneBody): Single<Void>
Run Code Online (Sandbox Code Playgroud)
手机机身
data class PhoneBody(val phone: String)
我的查询
disposable += registrationRepository.register(phone)
.addSchedulers()
.doOnSubscribe { viewState.showLoading() }
.doAfterTerminate { viewState.hideLoading() }
.subscribe({it ->
Log.d("PAPDEB", "$it Personal Acc Presenter")
}, this::handleError)
Run Code Online (Sandbox Code Playgroud)
它永远不会进入订阅 lambda,它会直接进入 this::handle ,即
if (t is ApiException) {
viewState.showError(t.message)
} else if (t is IOException) {
viewState.showError("No internet connection")
}
if (BuildConfig.DEBUG) {
t.printStackTrace()
}
}
Run Code Online (Sandbox Code Playgroud)
D/OkHttp: --> POST https://.../register/
D/OkHttp: Content-Type: application/json
D/OkHttp: Content-Length: 24
D/OkHttp: {"phone":"+79090000000"}
D/OkHttp: --> …Run Code Online (Sandbox Code Playgroud)