JSON响应的int值始终返回零

Meh*_*ani 9 android json retrofit2

我使用改造库调用HTTP请求,并从API获取结果。我在改型库中配置了日志,所以我可以看到发生了什么。响应是简单的原始整数类型。该问题是,它总是返回零。响应类(LoginModel)也是经典类,对于整数类型,它具有一个setter和一个getter。

public class LoginModel {

  @SerializedName("result")
  private int result;

  public void setResult(int result){
    this.result = result;
  }

  public int getResult(){
    return result;
  }
}
Run Code Online (Sandbox Code Playgroud)

下图是我的日志,您可以看到我收到响应10,但是当我在onResponse函数中记录getResult时,它始终打印为零。

Log.i("BODY : ", String.valueOf(response.body().getResult()));
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我不知道怎么了。感谢您的帮助。谢谢

更新:调用API的完整代码

Call<LoginModel> isSended = apiService.sendCode(phoneNumber);
            isSended.enqueue(new Callback<LoginModel>() {
                @Override
                public void onResponse(Call<LoginModel> call, Response<LoginModel> response) {
                    Log.i("BODY : ", String.valueOf(response.body().getResult()));
                    if (!response.isSuccessful()) {
                        Toast.makeText(context, context.getResources().getString(R.string.errorServer), Toast.LENGTH_LONG).show();
                        dismissProgressBarDialog();
                        return;
                    }
                    myTimer = new MyTimer(SECOND_TIME, 1000);
                    views.reactionActivationPress(response.body().getResult());
                }

                @Override
                public void onFailure(Call<LoginModel> call, Throwable t) {
                    Log.i(Constant.NETWORK_LOG, "sendCode : " + t.toString());
                    dismissProgressBarDialog();
                    Toast.makeText(MyApplication.getContext(), "Server Problem", Toast.LENGTH_LONG).show();
                }
            });
Run Code Online (Sandbox Code Playgroud)

Gson和改造创建代码:

OkHttpClient client = new OkHttpClient.Builder()
                    .connectTimeout(30, TimeUnit.SECONDS)
                    .readTimeout(30, TimeUnit.SECONDS)
                    .addInterceptor(loggingInterceptor)
                    .addInterceptor(chain -> {
                        Request request = chain.request();
                        Request newRequest;
                        newRequest = request.newBuilder()
                                .addHeader(HEADER_VERSION_CODE, String.valueOf(BuildConfig.VERSION_CODE))
                                .build();
                        return chain.proceed(newRequest);
                    })
                    .build();

            Gson gson = new GsonBuilder()
                    .setLenient()
                    .create();

            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(client)
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .build();
Run Code Online (Sandbox Code Playgroud)

Yuv*_*eja 3

您在代码中出现的问题是您尝试在响应中两次访问结果,请尝试如下

仅声明一次 response.body().getResult()

    Call<LoginModel> isSended = apiService.sendCode(phoneNumber);
                    isSended.enqueue(new Callback<LoginModel>() {
                        @Override
                        public void onResponse(Call<LoginModel> call, Response<LoginModel> response) {

                        dismissProgressBarDialog();
                        int model = response.body().getResult();                   
                        Log.i("BODY : ", String.valueOf(model));
                            if (!response.isSuccessful()) {
                                Toast.makeText(context, context.getResources().getString(R.string.errorServer), Toast.LENGTH_LONG).show();

                                return;
                            }
                            myTimer = new MyTimer(SECOND_TIME, 1000);
                            views.reactionActivationPress(model);
                        }

                        @Override
                        public void onFailure(Call<LoginModel> call, Throwable t) {
                            Log.i(Constant.NETWORK_LOG, "sendCode : " + t.toString());
                            dismissProgressBarDialog();
                            Toast.makeText(MyApplication.getContext(), "Server Problem", Toast.LENGTH_LONG).show();
                        }
                    });
Run Code Online (Sandbox Code Playgroud)