[英]Retrofit onFailure not working in login method
我正在使用Retrofit从Laravel调用登录方法,我的问题是,在编写正确的用户名和密码时,它会打开其他活动,一切都很好,但是当写错信息时,它不会打开任何内容但不显示消息错误。 什么东西少了?
Laravel代码:
public function login(Request $request) {
$assistant = DB::table('assistants')
->where('username', $request->input('username'))
->where('mot_de_passe', $request->input('mot_de_passe'))
->first();
if($assistant != null){
return response()->json ($assistant);
}else{
$returnData = array(
'status' => 'false',
'message' => 'write some message..');
return response()->json ($returnData ,500 );
}}
改造:
IAssistant iAssistant= APIClient.getClient().create(IAssistant.class);
iAssistant.login(username.getText().toString(),password.getText().toString()).enqueue(new Callback<Assistant>() {
@Override
public void onResponse(retrofit2.Call<Assistant> call, Response<Assistant> response) {
if (response.isSuccessful()){
startActivity(new Intent(getApplicationContext(), BottomNavigation.class));
Toast.makeText(getApplicationContext(),"assistant"+response.body().getNom(),Toast.LENGTH_LONG).show();
}}
@Override
public void onFailure(retrofit2.Call<Assistant> call, Throwable t) {
Toast.makeText(getApplicationContext(),"'error",Toast.LENGTH_LONG).show();
Log.v("tag!!!!!!!!!!","error"+t.getMessage());
}
});
从官方的javadoc看到。
onFailure(Call<T> call, Throwable t)
发生网络异常时与服务器通信或在创建请求或处理响应时发生意外异常时调用。
onResponse(Call<T> call, Response<T> response)
为收到的HTTP响应调用。
在您粘贴的代码中,您似乎正在获得HTTP响应。
好吧,这是一个500的代码响应,所以不是一个好的,但无论如何。
这就是为什么Response
有一个isSuccessful()
方法,因为它在方法细节中有解释
onResponse()
来自doc的方法详细信息
注意:HTTP响应可能仍指示应用程序级别的故障,例如404或500.调用Response.isSuccessful()以确定响应是否表示成功。
因此,为了您处理它,以这种方式更新您的代码
public void onResponse(retrofit2.Call<Assistant> call, Response<Assistant> response) {
if (response.isSuccessful()){
startActivity(new Intent(getApplicationContext(), BottomNavigation.class));
} else {
// Handle your 500 here
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.