我是关于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。
有人可以通过改装给我一个发送对象的想法吗?
答案 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)
您的API服务器是否正常运行?
HTTP status 500 means internal server error。首先使用可靠的客户端测试您的API服务器。查看服务器上的错误日志,确保哪一方导致问题。
您是否在改装实例中添加了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;
}
}