【问题标题】:Retrofit GET request with a parameter使用参数改造 GET 请求
【发布时间】:2018-02-12 11:10:54
【问题描述】:

我使用 Retrofit GET 请求调用 api。此 GET 请求需要一个参数。当我使用 POSTMAN 进行测试时,API 可以完美运行,但是当我尝试使用下面的 API 调用时,它会返回

对象引用未设置为对象的实例。

@GET("/api/account/*******")
Call<ResetPassword> requestPasswordResetToken(@Query("phoneNumber") String phoneNumber);

以及我如何在我的活动中提出该请求的代码。

public void requestPasswordResetToken(String phoneNumber) {

    Retrofit retrofit = RetrofitClient.getClient("");
    APIService mAPIService = retrofit.create(APIService.class);

    final ProgressDialog loading = ProgressDialog.show(this, "Please Wait", "Loading your information...", false, false);
    loading.setCancelable(true);
    loading.show();

    mAPIService.requestPasswordResetToken(phoneNumber).enqueue(new Callback<ResetPassword>() {
        @Override
        public void onResponse(Response<ResetPassword> response, Retrofit retrofit) {
            if(response.isSuccess()) {
                String loginSuccess = response.body().getSuccess();
                String message = response.body().getMessage();
                if (loginSuccess.equals("true")) {
                    loading.dismiss();
                    showSnackMessage(message);

                }else {
                    Log.e("loginError", message);
                    Toast.makeText(RequestPasswordResetActivity.this, message, Toast.LENGTH_LONG).show();
                    loading.dismiss();
                }
            }
        }

        @Override
        public void onFailure(Throwable throwable) {
            Log.e("ResetPasswordError", throwable.getMessage());
            Toast.makeText(RequestPasswordResetActivity.this, "Unable to Login, Please Try Again", Toast.LENGTH_LONG).show();
            loading.dismiss();
        }
    });
}

API 预期的屏幕截图。字段名称正确。

【问题讨论】:

  • 使用 com.squareup.okhttp3:logging-interceptor 记录您的 API 调用并检查
  • @SivakumarS 它已经被记录,这是我的回应 D/OkHttp: { D/OkHttp: "total": 0, D/OkHttp: "data": null, D/OkHttp: "message ": "对象引用未设置为对象的实例。", D/OkHttp: "success": false D/OkHttp: }

标签: java android rest retrofit2


【解决方案1】:

您的代码看起来不错。你检查你正在处理的 api 的结果格式吗?并且 ResetPassword 类属性(变量名和类型)必须与 api 的响应相同。 (注意大写或小写字母)。

也试试这个格式请求

  @GET("methodName/{PARAMETER}")
Call<Object> getData(
        @Path("telephoneNumber") String telephoneNumber
);

【讨论】:

  • 我已经用 API 期望的变量名称和数据类型的屏幕截图更新了我的答案。
  • API 为您提供结果。我的意思是回应。 json 对象属性必须与您的特殊类同名。
  • 从你的回答我试过这个但没有锻炼 @GET("/api/account/******/{phoneNumber}") Call requestPasswordResetToken( @Path("phoneNumber ") 字符串电话号码 );
【解决方案2】:

确保您调用了正确的方法,您似乎调用了requestPasswordResetToken,但您在界面中显示了resendVerification

【讨论】:

  • 我已经用正确的实现编辑了问题,但这不是问题..问题仍然存在。
  • @LendingSquare 检查你的改造初始化,和api日志,尝试查找失败的细节。
猜你喜欢
  • 2020-06-14
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
相关资源
最近更新 更多