JSON 响应对于 int 值总是返回零

共6个回答, 标签: android json retrofit2

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

公共类 LoginModel {

@ SerializedName (“结果”)
私有 int 结果;

公共 void setResult (int result) {
这个。结果 = 结果;
}

公共 int getResult () {
返回结果;
}
}

下图是我的日志,你可以看到我得到了回复 10,但是当我登录时GetResult在 onResponse 函数中,它总是打印零。

Log.i (“BODY:”,String.valueOf (response.body ().getResult ();

enter image description here

我不知道怎么了。我感谢任何帮助。谢谢

更新: 调用 API 的完整代码

呼叫 isSended = apiService.sendCode (电话号码);
IsSended.enqueue (新回调 () {
@ 覆盖
公共 void onResponse (呼叫呼叫,响应响应) {
Log.i (“BODY:”,String.valueOf (response.body ().getResult ();
如果 (!response.isSuccessful ()) {
Toast.makeText (context,context.getResources ().getString (R.string.errorServer),Toast.LENGTH_LONG).show ();
DismissProgressBarDialog ();
返回;
}
MyTimer = 新的 MyTimer (第二次,1000);
Views.reactionActivationPress (response.body ().getResult ());
}

@ 覆盖
公共 void onFailure (呼叫,Throwable t) {
Log.i (Constant.NETWORK_LOG,“sendCode:” t.toString ());
DismissProgressBarDialog ();
Toast.makeText (MyApplication.getContext (),“服务器问题”,Toast.LENGTH_LONG).show ();
}
});

Gson 和改造创建代码:

OkHttpClient 客户端 = 新的 OkHttpClient.Builder ()
。ConnectTimeout (30,时间单位。秒)
.ReadTimeout (30,时间单位.秒)
。AddInterceptor (loggingInterceptor)
。AddInterceptor (链-> {
请求请求 = 链。请求 ();
请求新请求;
NewRequest = request.newBuilder ()
。AddHeader (HEADER_VERSION_CODE,String.valueOf (BuildConfig.VERSION_CODE))
。构建 ();
返回链。继续 (新请求);
})
。构建 ();

Gson gson = 新 GsonBuilder ()
。SetLenient ()
。创建 ();

Retrofit = 新的 Retrofit.Builder ()
。BaseUrl (BASE_URL)
。客户 (客户)
。AddConverterFactory (ScalarsConverterFactory.create ())
。AddConverterFactory (GsonConverterFactory.create (gson))
.AddCallAdapterFactory (create.create ())
。构建 ();
第1个答案

你在代码中的问题是你试图访问结果两次,请尝试如下

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

呼叫IsSended = apiService.sendCode (电话号码);
IsSended.enqueue (新回调)() {
@ 覆盖
公共 void onResponse (呼叫呼叫,响应响应) {

DismissProgressBarDialog ();
Int 模型 = response.body ().getResult ();
Log.i (“BODY:”,String.valueOf (模型));
如果 (!response.isSuccessful ()) {
Toast.makeText (context,context.getResources ().getString (R.string.errorServer),Toast.LENGTH_LONG).show ();

返回;
}
MyTimer = 新的 MyTimer (第二次,1000);
观点.reactionActivationPress (模型);
}

@ 覆盖
公共无效失败 (电话呼叫,Throwable t) {
Log.i (Constant.NETWORK_LOG,“sendCode:” t.toString ());
DismissProgressBarDialog ();
Toast.makeText (MyApplication.getContext (),“服务器问题”,Toast.LENGTH_LONG).show ();
}
});
第2个答案

代码没有问题。它工作得很好。 确保您正在使用 Gson 进行改造。 我已经测试了代码,它工作得很好。不需要在模型类中进行更改。

第3个答案
ApiClient.getClient ().create (ApiService.class).sendCode (phoneNumber).enqueue (新回调() {
@ 覆盖
公共 void onResponse (呼叫呼叫,响应响应) {
Log.i (“BODY:”,String.valueOf (response.body ().getResult ();
如果 (!response.isSuccessful ()) {
Toast.makeText (context,context.getResources ().getString (R.string.errorServer),Toast.LENGTH_LONG).show ();
DismissProgressBarDialog ();
返回;
}
MyTimer = 新的 MyTimer (第二次,1000);
Views.reactionActivationPress (response.body ().getResult ());
}

@ 覆盖
公共无效失败 (电话呼叫,Throwable t) {
Log.i (Constant.NETWORK_LOG,“sendCode:” t.toString ());
DismissProgressBarDialog ();
Toast.makeText (MyApplication.getContext (),“服务器问题”,Toast.LENGTH_LONG).show ();
}
});
第4个答案

尝试将 “结果” 字段公开,而不是私有。我猜,这种改造忽略了你的 json,根本没有初始化结果字段。删除 getter 和 setter,并公开结果字段。

公共类 LoginModel {

@ SerializedName (“结果”)
公共 int 结果;

}
第5个答案

使用整数,如果你有空,这意味着你得到的 json从服务器有另一个名称或类型, 用邮递员测试你的 api并检查响应名称和类型

公共类 LoginModel {

@ SerializedName (“结果”)
@ 曝光
私有整数结果;

公共 void setResult (整数结果) {
这个。结果 = 结果;
}

公共整数 getResult () {
返回结果;
}
}
第6个答案

我认为你的 POJO 课上有一个问题。试试这个,它可能会帮助你.

公共类 LoginModel 实现可串行化 {

@ SerializedName (“结果”)
@ 曝光
私有整数结果;

公共整数 getResult () {
返回结果;
}

公共 void setResult (整数结果) {
这个。结果 = 结果;
}

}

相关问题

无法通过新项目从 jcenter 获取依赖项 [已关闭] 注意: 无法读取获取 [Ljava.lang.Object;@79d6c4df 的 kotlin 元数据 我的单身可以被多次调用 如何通过拆分字符串将数组转换为对象? JSON 响应对于 int 值总是返回零 在数组中每个值的中间插入值 使用改造参数 "soap12:Body" 使用 Xml Web 服务在类中没有匹配项 为什么我不能从 json Retrofit 中获取特殊字段?