Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 用户登录无法使用改型和viewmodel_Android_Kotlin_Retrofit_Retrofit2_Viewmodel - Fatal编程技术网

Android 用户登录无法使用改型和viewmodel

Android 用户登录无法使用改型和viewmodel,android,kotlin,retrofit,retrofit2,viewmodel,Android,Kotlin,Retrofit,Retrofit2,Viewmodel,我的登录不起作用..我使用的是改型和视图模型…实际上,scenerio是一次点击登录显示转换(登录页面到登录页面),但它没有移动到登录页面到主页 此方法model.ResponseData.observe未收到调用 我不知道我哪里出错了 需要帮忙吗谢谢 后勤活动:-- class LoginActivity:AppCompatActivity(){ lateinit变量模型:LoginViewModel 重写创建时的乐趣(savedInstanceState:Bundle?){ super.on

我的登录不起作用..我使用的是改型和视图模型…实际上,scenerio是一次点击登录显示转换(登录页面到登录页面),但它没有移动到登录页面到主页

此方法
model.ResponseData.observe
未收到调用

我不知道我哪里出错了

需要帮忙吗谢谢

后勤活动:--

class LoginActivity:AppCompatActivity(){
lateinit变量模型:LoginViewModel
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.login\u活动)
val按钮=findViewById(R.id.plusbutton)
val forgotpassword=findViewById(R.id.forgotpassword)
button.setOnClickListener{
val i=Intent(applicationContext,RegisterActivity::class.java)
星触觉(一)
}
forgotpassword.setOnClickListener{
val i=Intent(applicationContext,ForgotPassword::class.java)
星触觉(一)
}
model=ViewModelProvider(此)[LoginViewModel::class.java]
model.ResponseData.observe(此,对象:观察者{
更改后覆盖乐趣(t:LoginResponse?){
val intent=intent(applicationContext,HomeActivity::class.java)
意图.旗帜=
Intent.FLAG\u活动\u新建任务或Intent.FLAG\u活动\u清除任务
星触觉(意图)
完成()
}
})
loginbtn.setOnClickListener{
val email=loginuser.text.toString().trim()
val password=loginpassword.text.toString().trim()
if(email.isEmpty()){
Toast.makeText(
applicationContext,“数据丢失”,Toast.LENGTH\u LONG
).show()
loginuser.error=“需要电子邮件”
loginuser.requestFocus()
return@setOnClickListener
}else if(password.isEmpty()){
loginpassword.error=“需要密码”
loginpassword.requestFocus()
return@setOnClickListener
}
否则{
model.loadAccountData(电子邮件、密码)
}
}
}}
视图模型:--

类LoginViewModel(上下文:应用程序,私有val savedStateHandle:savedStateHandle):AndroidViewModel(上下文){
私有变量a=MutableLiveData()
val用户:MutableLiveData=savedStateHandle.getLiveData(“用户”,“用户”)
val password:MutableLiveData=savedStateHandle.getLiveData(“密码”,“密码”)
val ResponseData:MutableLiveData
得到(){
如果(_arespona==null){
_arespona=MutableLiveData()
loadAccountData(user.toString(),password.toString())
}
返回(arespona)
}
fun loadAccountData(电子邮件:字符串,密码:字符串){
修改client.instance.userLogin(电子邮件、密码)
.enqueue(对象:回调{
覆盖失效时的乐趣(调用:调用,t:可丢弃){
Log.d(“res”和“+t”)
_arespona.value=null
}
覆盖响应(
呼叫:呼叫,,
答复:答复
) {
var res=响应
if(res.body()?.status==200){
_arespona.value=response.body()
}否则{
试一试{
瓦尔·乔布杰罗=
JSONObject(response.errorBody()!!.string())
Toast.makeText(
getApplication(),
jObjError.getString(“用户消息”),
吐司,长度
).show()
}捕获(e:例外){
Log.e(“errorr”,e.message)
}
}
}
})
}
}
试试这个

 if (res.body()?.status == 200) {
                _aResponseData.postValue(response.body()) 
            }

经过讨论和调试,问题似乎不在观察者身上,而是在通过改型解析API调用响应的过程中

_aResponseData.value = response.body()
这里的
response.body()
无法将响应解析为
LoginResponse
类对象,这最终导致了更多关于导航的问题


解决解析问题有助于O.p.通过调试主要问题。

注释不用于扩展讨论;对话已经结束。这是我的主动赏金……需要帮助@IRONMAN。我确定我一有空就去看看。现在有点忙。好的,慢慢来……没问题。我说,@IRONMAN看起来我有点晚了:D
 if (res.body()?.status == 200) {
                _aResponseData.postValue(response.body()) 
            }
_aResponseData.value = response.body()