Android 为什么response.body()为空?
我使用改型向服务器发送一个json对象,我尝试创建一个用户,我发送这个json对象Android 为什么response.body()为空?,android,json,post,retrofit,Android,Json,Post,Retrofit,我使用改型向服务器发送一个json对象,我尝试创建一个用户,我发送这个json对象 {“apellido”:“prueba”,“电子邮件”:prueba@hotmail.com“,“fechaDeNacimiento”:“1998年11月29日”,“formaDeRegistro”:“Android”,“nombre”:“prueba”,“密码”:“12345678”,“用户名”:“prueba”} 在本例中,我创建了一个无效用户,因此服务器使用一个json对象响应,其中的代码是代码错误,消息是
{“apellido”:“prueba”,“电子邮件”:prueba@hotmail.com“,“fechaDeNacimiento”:“1998年11月29日”,“formaDeRegistro”:“Android”,“nombre”:“prueba”,“密码”:“12345678”,“用户名”:“prueba”}
在本例中,我创建了一个无效用户,因此服务器使用一个json对象响应,其中的代码是代码错误,消息是错误的解释
[{"code":"5","message":"The email is in use"}]
接口
public interface UserClient {
@POST("usuarios")
Call<Usuarios> create(@Body Usuarios usuario);
}
安装和改装工具
OkHttpClient.Builder okhttpClientBuilder=new OkHttpClient.Builder();
HttpLoggingInterceptor loggin=new HttpLoggingInterceptor();
loggin.setLevel(HttpLoggingInterceptor.Level.BODY);
okhttpClientBuilder.addInterceptor(loggin);
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("https://intense-lake-39874.herokuapp.com")
.addConverterFactory(GsonConverterFactory.create())
.client(okhttpClientBuilder.build());
Retrofit retrofit = builder.build();
UserClient service = retrofit.create(UserClient.class);
Call<Usuarios> call = service.create(usuario);
call.enqueue(new Callback<Usuarios>() {
@Override
public void onResponse(Call<Usuarios> call, Response<Usuarios> response) {
Toast.makeText(Main2Activity.this,"Usuario Registrado! "+response.body().getMessage,Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<Usuarios> call, Throwable t) {
Toast.makeText(Main2Activity.this,"Algo fallo..",Toast.LENGTH_SHORT).show();
}
});
}
OkHttpClient.Builder okhttpClientBuilder=new OkHttpClient.Builder();
HttpLoggingInterceptor loggin=新的HttpLoggingInterceptor();
loggin.setLevel(HttpLoggingInterceptor.Level.BODY);
okhttpClientBuilder.addInterceptor(loggin);
reformation.Builder=新的reformation.Builder()
.baseUrl(“https://intense-lake-39874.herokuapp.com")
.addConverterFactory(GsonConverterFactory.create())
.client(okhttpClientBuilder.build());
改装改装=builder.build();
UserClient服务=reformation.create(UserClient.class);
Call=service.create(usuario);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Toast.makeText(Main2Activity.this,“Usuario registdo!”+response.body().getMessage,Toast.LENGTH\u SHORT.show();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(Main2Activity.this,“Algo fallo..”,Toast.LENGTH_SHORT.show();
}
});
}
因此,我可以看到logcat响应,但在主体中它指定为null,我如何访问“消息”
该错误是因为您的响应未成功,因此您需要解析错误正文,请尝试以下代码:
if (response.isSuccessful()) {
// Do your success stuff...
} else
{
try
{
JSONObject jObjError = new JSONObject(response.errorBody().string());
Toast.makeText(getContext(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
}
当然,您可以使用另一个解析器,如Gson。该错误是因为您的响应不成功,因此您需要解析错误主体,请尝试以下代码:
if (response.isSuccessful()) {
// Do your success stuff...
} else
{
try
{
JSONObject jObjError = new JSONObject(response.errorBody().string());
Toast.makeText(getContext(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
}
当然,你可以使用另一个解析器,比如Gson。你可以使用
response.body().getMessage
而不是response.body().getMessage
是的,我使用它,但是正如我所说的,body指定为null,那么应用程序崩溃你能为它显示崩溃日志吗?当然,给我一秒钟你可以使用response.body().getMessage
而不是response.body().getMessage
是的,我使用它,但正如我所说的,body指定为null,因此应用程序崩溃。你能为它显示崩溃日志吗?请给我一秒钟