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)
您在代码中出现的问题是您尝试在响应中两次访问结果,请尝试如下
仅声明一次 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)
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |