使用POST改造2发送对象

时间:2016-10-03 15:27:51

标签: android retrofit2

我是关于Retrofit Library的新手,我想知道使用post改造方法发送对象的更好的原因。

这是一些代码。

我的班级:

public class ExampleClass implements Serializable {

    @SerializedName("id")
    int id;


    @SerializedName("name")
    String name;

    public ExampleClass(int id, String name) {
        this.id = id;
        this.name= name;
    }

}

我的界面:

public interface ApiInterface {
    @Headers("Content-Type: application/json")
    @POST("getclass/")
    Call<ExampleClass> getExampleClass(@Body ExampleClass exampleClass);
}

我的改装电话:

......
        ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
        Call<ExampleClass> call = apiService.getExampleClass(exampleClass);
        call.enqueue(new Callback<ExampleClass>() {
            @Override
            public void onResponse(Call<ExampleClass> call, Response<ExampleClass> response) {

                int statusCode = response.code();

                Log.i(TAG, "Status Code: " + statusCode);

            }

            @Override
            public void onFailure(Call<ExampleClass> call, Throwable t) {
                Log.i(TAG, "Error: " + t.toString());
            }

        });

但每次它都返回状态码500。

有人可以通过改装给我一个发送对象的想法吗?

3 个答案:

答案 0 :(得分:1)

您可以在@FormUrlEncoded的帮助下发送它,例如:

@FormUrlEncoded
@Headers("Content-Type: application/json")
@POST("getclass/")
Call<ExampleClass> getExampleClass(@Field("id") int id, @Field("name") String name);

但我认为你的方式最简单,也是正确的。

如果你不懒,你可以找到所有关于改造here

的信息

答案 1 :(得分:0)

  1. 您的API服务器是否正常运行?

    HTTP status 500 means internal server error。首先使用可靠的客户端测试您的API服务器。查看服务器上的错误日志,确保哪一方导致问题。

  2. 您是否在改装实例中添加了Gson或Jackson转换器?

    如果你的服务器是清除的,那么客户端,你的应用程序有问题。格式错误的请求正文可能导致服务器错误。

    您是否添加了Gson(或Jackson)转换器?您的@Headers注释不会自动将您的对象转换为json。如果您的服务器需要json for request,那么您不会发送'object',而是发送一个对象的json表示字符串。实现Serializable接口是不必要的。如果你添加它,Gson转换器会自动将任意对象转换为json,或者你必须使用RequestBody

    来自Retrofit github page (REQUEST BODY section)

      

    如果未添加转换器,则只能使用RequestBody

答案 2 :(得分:0)

500内部服务器错误

500状态代码或内部服务器错误,表示服务器无法处理未知原因的请求。有时,当更具体的5xx错误更合适时,会出现此代码。

导致此错误的最常见原因是服务器配置错误(例如格式错误的.htaccess文件)或缺少软件包(例如,在没有正确安装PHP的情况下尝试执行PHP文件)。

你可以查看它。它对我来说很好用

Api InterFace课程

public interface ApiInterface {

    @FormUrlEncoded
        @POST("/billingrest/save")
        Call<LoginError> sendProductList(@Body SaveBill saveBill);

}

SaveBill模型

package com.example.dev.billingsoftware.model;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

import java.util.List;

/**
 * Created by dev on 4/8/17.
 */
public class SaveBill {

    @SerializedName("customer_name")
    @Expose
    private String customerName;
    @SerializedName("customer_id")
    @Expose
    private String customerId;
    @SerializedName("bill_number")
    @Expose
    private String billNumber;
    @SerializedName("mobile_number")
    @Expose
    private String mobileNumber;
    @SerializedName("bill_date")
    @Expose
    private String billDate;
    @SerializedName("address")
    @Expose
    private String address;
    @SerializedName("count")
    @Expose
    private String count;
    @SerializedName("data")
    @Expose
    private List<BillData> data = null;

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public String getCustomerId() {
        return customerId;
    }

    public void setCustomerId(String customerId) {
        this.customerId = customerId;
    }

    public String getBillNumber() {
        return billNumber;
    }

    public void setBillNumber(String billNumber) {
        this.billNumber = billNumber;
    }

    public String getMobileNumber() {
        return mobileNumber;
    }

    public void setMobileNumber(String mobileNumber) {
        this.mobileNumber = mobileNumber;
    }

    public String getBillDate() {
        return billDate;
    }

    public void setBillDate(String billDate) {
        this.billDate = billDate;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCount() {
        return count;
    }

    public void setCount(String count) {
        this.count = count;
    }

    public List<BillData> getData() {
        return data;
    }

    public void setData(List<BillData> data) {
        this.data = data;
    }

}