即使请求在Retrofit 2中成功获得Null响应

时间:2017-01-25 07:28:11

标签: android retrofit2 okhttp

我在Retrofit 2的Response body中变为null,而在body中我有有效的数据。

 //using retrofit
    HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
    logging.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    httpClient.addInterceptor(logging);

    Retrofit adapter = new Retrofit.Builder()
                        .baseUrl(Config.CUSTOMER_URL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .client(httpClient.build())
                        .build();
    RegisterCustomer api = adapter.create(RegisterCustomer.class);
    Call<Model> call = api.registerCustomer(custName.getText().toString() , phoneNumber.getText().toString(), address.getText().toString(), "abc");
    call.enqueue(new Callback<Model>() {
        @Override
        public void onResponse(Call<Model> call, retrofit2.Response<Model> response) {
            if(response.isSuccessful())
            {
                Log.d("CallBack",response.body().getCustId()+"###"+response.body().getCustUri()+response.code());
            }

        }

        @Override
        public void onFailure(Call<Model> call, Throwable t) {
            Log.d("CallBack","error saving customer"+t.getMessage());

        }
    });

我的界面。

  public interface RegisterCustomer
{
    @FormUrlEncoded
    @POST("customer")
    Call<Model> registerCustomer(
            @Field("cust_name") String cust_name,
            @Field("phone") String phone,
            @Field("address") String address,
            @Field("apikey") String apikey
    //        Callback<Response> callback
    );
}

我的logcat如下:

01-25 12:52:26.139 12163-12525/com.lab.yourhomebasket D/OkHttp: --> POST http://192.168.0.101/grocery_api/customer http/1.1
01-25 12:52:26.139 12163-12525/com.lab.yourhomebasket D/OkHttp: Content-Type: application/x-www-form-urlencoded
01-25 12:52:26.142 12163-12525/com.lab.yourhomebasket D/OkHttp: Content-Length: 57
01-25 12:52:26.142 12163-12525/com.lab.yourhomebasket D/OkHttp: cust_name=deep&phone=6656455465&address=bhdjih&apikey=abc
01-25 12:52:26.142 12163-12525/com.lab.yourhomebasket D/OkHttp: --> END POST (57-byte body)
01-25 12:52:26.529 12163-12525/com.lab.yourhomebasket D/OkHttp: <-- 201 Created http://192.168.0.101/grocery_api/customer (386ms)
01-25 12:52:26.529 12163-12525/com.lab.yourhomebasket D/OkHttp: Date: Wed, 25 Jan 2017 07:22:29 GMT
01-25 12:52:26.529 12163-12525/com.lab.yourhomebasket D/OkHttp: Server: Apache/2.4.18 (Win32) OpenSSL/1.0.2e PHP/7.0.4
01-25 12:52:26.529 12163-12525/com.lab.yourhomebasket D/OkHttp: X-Powered-By: PHP/7.0.4
01-25 12:52:26.529 12163-12525/com.lab.yourhomebasket D/OkHttp: Content-Length: 42
01-25 12:52:26.529 12163-12525/com.lab.yourhomebasket D/OkHttp: Keep-Alive: timeout=5, max=100
01-25 12:52:26.529 12163-12525/com.lab.yourhomebasket D/OkHttp: Connection: Keep-Alive
01-25 12:52:26.529 12163-12525/com.lab.yourhomebasket D/OkHttp: Content-Type: application/json;charset=utf-8
01-25 12:52:26.529 12163-12525/com.lab.yourhomebasket D/OkHttp: {"cust_id":18,"cust_uri":"\/customer\/18"}
01-25 12:52:26.529 12163-12525/com.lab.yourhomebasket D/OkHttp: <-- END HTTP (42-byte body)
01-25 12:52:26.533 12163-12163/com.lab.yourhomebasket D/CallBack: null###null201

我的有效回复是{“cust_id”:18,“cust_uri”:“/ customer / 18”}我得到null ### null201数据也在服务器上成功保存。

Model.java

           import com.fasterxml.jackson.annotation.JsonProperty;
        import java.util.HashMap;
        import java.util.Map;
        import com.fasterxml.jackson.annotation.JsonAnyGetter;
        import com.fasterxml.jackson.annotation.JsonAnySetter;
        import com.fasterxml.jackson.annotation.JsonIgnore;
        import com.fasterxml.jackson.annotation.JsonInclude;
        import com.fasterxml.jackson.annotation.JsonProperty;
        import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "cust_id",
        "cust_uri"
})
public class Model {

    @JsonProperty("cust_id")
    private Integer custId;
    @JsonProperty("cust_uri")
    private String custUri;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    @JsonProperty("cust_id")
    public Integer getCustId() {
        return custId;
    }

    @JsonProperty("cust_id")
    public void setCustId(Integer custId) {
        this.custId = custId;
    }

    @JsonProperty("cust_uri")
    public String getCustUri() {
        return custUri;
    }

    @JsonProperty("cust_uri")
    public void setCustUri(String custUri) {
        this.custUri = custUri;
    }

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

}

由于 迪帕克

1 个答案:

答案 0 :(得分:1)

请检查您的function constructURL(id, type) { var queryString = new ConstructQString('controller.do'); queryString.add('id', id); queryString.add('sampleType', type); windowOpener.createWindow(queryString.getUrl(), 'url', false, position); } 应该如下所示。

Model.java