Android 为什么response.body()为空?

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对象响应,其中的代码是代码错误,消息是

我使用改型向服务器发送一个json对象,我尝试创建一个用户,我发送这个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,因此应用程序崩溃。你能为它显示崩溃日志吗?请给我一秒钟