Retrofit,Gson,将数据从应用程序自定义jsonfile解析到服务器

时间:2018-12-07 09:20:56

标签: android json gson retrofit2

我正在尝试进行改造,以使用REST API将Gson的自定义json数据解析到本地服务器。

这是生成的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请求可以在数组中放置数组的位

2 个答案:

答案 0 :(得分:0)

对于数组和其他类型的数据,您可以在requestBody内发送数据,在服务器端,您可以轻松地将其映射到要创建的POJO类到POJO类,这与要发送的POJO类相同。

答案 1 :(得分:0)

例如,您要改写的url设置是什么?您似乎将其设置为类似“ .. http://something.com/something”。改型要求您使用的网址应以“ /”结尾。我可以告诉您,因为您的发布方法是“ / products”。那么,如果您正确设置了网址,则该网址应为“ http://something.com/something//products

不仅如此。 @formURLEncoded不能与post方法一起使用。并使用@field将也应该使用。.