【问题标题】:Retrofit2 POST Request response returns nullRetrofit2 POST 请求响应返回 null
【发布时间】:2019-07-01 15:40:53
【问题描述】:

我使用带有多个参数的retrofit2 发出POST 请求。调用成功,但response.body() 等于null。我用 Postman 用相同的参数检查了 URL,它工作正常,所以我真的不认为这是调用的问题,但我相信我用来接收 Callback 的方法不正确(错误代码我从response.code() 收到的是 500) 。任何帮助将不胜感激,谢谢。

POST接口:

public interface POSTApi {
  String BASE_URL = "someURL/";

  @POST("like")
  Call<Resultlike> post(@Body Resultlike login);
}

拨打电话

private Retrofit retrofit = new Retrofit.Builder().baseUrl(POSTApi.BASE_URL)
        .callbackExecutor(Executors.newSingleThreadExecutor())
        .addConverterFactory(GsonConverterFactory.create())
        .build();

POSTApi apiInterface = retrofit.create(POSTApi.class);

final Resultlike resultlike = new Resultlike("param1","param2","param3","param4");
    Call<Resultlike> call = apiInterface.post(resultlike);

    call.enqueue(new Callback<Resultlike>() {
        @Override
        public void onResponse(Call<Resultlike> call, Response<Resultlike> response) {
            Resultlike logresponse = (Resultlike) response.body();

            Log.e("TAG", String.valueOf(response.code()));

            if(!response.isSuccessful()) {
                Log.e("TAG", "NOT SUCCESSFUL");
            }


            Log.e("TAG", logresponse.getResult().getMessage());
            Log.e("TAG", logresponse.getResult().getStatus());
        }

        @Override
        public void onFailure(Call<Resultlike> call, Throwable t) {
            Log.e("TAG", "FAILURE");
        }
    });

ResultLike 对象类:

public class Resultlike {

// These 4 are parameters that are passed in to make the POST request
@SerializedName("uid")
public String uid;
@SerializedName("contentId")
public String contentId;
@SerializedName("like")
public String like;
@SerializedName("timestamp")
public String timestamp;

// This is supposed to be receiving the callback of the data
@SerializedName("result")
public DataLike result;

public Resultlike(String uid, String contentId, String like, String timestamp) {
    this.uid = uid;
    this.contentId = contentId;
    this.like = like;
    this.timestamp = timestamp;
}


public DataLike getResult() { return result; }

public void setResult(DataLike setData) { result = setData; }

public String getUid() { return uid; }

public String getTimestamp() { return timestamp; }

public String getLike() { return like; }

public String getContentId() { return contentId; }

public void setUid(String uid) { this.uid = uid; }

public void setTimestamp(String timestamp) { this.timestamp = timestamp; }

public void setLike(String like) { this.like = like; }

public void setContentId(String contentId) { this.contentId = contentId; }

}

DataLike 对象类:

public class DataLike {

    @SerializedName("status")
    @Expose
    private String status = "";

    @SerializedName("message")
    @Expose
    private String message = "";

    public String getMessage() { return message; }

    public String getStatus() { return status; }

    public void setMessage(String message) { this.message = message; }

    public void setStatus(String status) { this.status = status; }
}

我期待回调的 JSON 数据:

{
  "result": {
    "status": "some string",
    "message": "some string"
  }
}

崩溃前的相关日志:

// 500 is the response code resulting from response.code()
E/TAG: 500
E/TAG: NOT SUCCESSFUL

【问题讨论】:

  • 那你的服务器端可能有问题。
  • 500 表示内部服务器错误。所以最好检查服务器端日志。
  • 检查你的服务器,可能你的服务器端有问题。
  • body() 返回 null 因为您的内部服务器错误导致解析 json 返回值失败。
  • 您是否尝试过通过curl 或与 Postman 进行相同的呼叫来验证这是一个 APP 问题?

标签: java android retrofit2


【解决方案1】:

web服务响应码是500,表示服务器端错误, 所以通知 web 端开发者从他们这边检查什么问题。

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2022-01-04
    • 2018-02-23
    • 2015-08-14
    • 2011-05-30
    • 2020-05-06
    相关资源
    最近更新 更多