【发布时间】:2018-12-07 09:20:56
【问题描述】:
我正在尝试使用改造来使用 REST API 将带有 Gson 的自定义 json 数据解析到 localhost 服务器。
这是我正在寻找的结果 json:
{
"user_id": 2,
"product": {
"id": 15,
"item_count": 99
}
}
下面是我创建的界面
public interface APIService {
@POST("/products")
@FormUrlEncoded
Call<Product> savePost(@Header("Token")String authKey,
@Field("product") Object product,
@Field("userId") String userId);
}
这是我用来发送数据的函数
// string that i use to call the classes
String userID;
String authKey;
mAPIService = ApiUtils.getAPIService();
mProduct = new Product();
mProduct.setId(productID);
mProduct.setItemCount(numberOfItems.getText().toString().trim());
final String stringMProduct = mProduct.toString();
sendPost(userID, stringMProduct, authKey);
// the function that parses all the data
public void sendPost( String userID, String product, String authKey ) {
mAPIService.savePost(authKey, userID, product).enqueue(new Callback<Product>() {
@Override
public void onResponse(Call<Product> call, retrofit2.Response<Product> response) {
if(response.isSuccessful()) {
showResponse(response.body().toString());
Log.i(TAG, "post submitted to API." + response.body().toString());
}
}
@Override
public void onFailure(Call<Product> call, Throwable t) {
Log.e(TAG, "Unable to submit post to API.");
}
});
}
这是我使用 Gson 将数据解析为 json 的类
public class OrderRequest {
@SerializedName("product")
@Expose
private Product product;
@SerializedName("user_id")
@Expose
private String userId;
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
@Override
public String toString() {
return "OrderRequest{" +
"product=" + product +
", userId='" + userId + '\'' +
'}';
}
}
另一个 Gcode 类。
Public class Product {
@SerializedName("item_count")
@Expose
private String itemCount;
@SerializedName("id")
@Expose
private String id;
public String getItemCount() {
return itemCount;
}
public void setItemCount(String itemCount) {
this.itemCount = itemCount;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "Product{" +
"itemCount='" + itemCount + '\'' +
", id='" + id + '\'' +
'}';
}
}
这是我用来将数据解析到服务器的所有代码,我真的很困惑我应该如何调试它或有效负载在哪里,我知道这是一个代码转储,这是不允许的。我最困惑的一点是使costom post请求成为可以在数组中包含数组的位
【问题讨论】:
-
这段代码到底有什么问题?
-
问题是数据没有发布,我认为我对数据的解析错误,但我知道如何作弊
-
在
onFailure()方法中将Log.e(TAG, "Unable to submit post to API.");更改为Log.e(TAG, t);并尝试将数据从客户端发送到服务器。如果发送数据失败,你会得到错误日志(失败的原因)。只需edit 问题并在此处发布该错误日志。或使用 Postman 客户端测试该 API 并确认。
标签: android json gson retrofit2