【问题标题】:How to pass json object with array on retrofit如何在改造时传递带有数组的json对象
【发布时间】:2018-08-30 21:30:54
【问题描述】:

当我通过邮递员作为行请求(Json)发送请求时,我得到了成功响应,但从我的 android 设备上它没有成功。

邮递员请求

这是我的 Android 代码,

接口ApiService.Class

    @Headers("Content-Type: application/json")
    @POST("api/ShopData/AddProduct")
    Call<AddNewProductResponse> addNewProduct(@Header("Authorization") String authorization, @Body JsonObject jsonObject);

班级ApiClient.Class

public static Call<AddNewProductResponse> addNewProduct(String token, JsonObject jsonObject) {
    token = "Bearer " + token;
    Call<AddNewProductResponse> call = apiService.addNewProduct(token, jsonObject);
    return call;
}

API 调用

    private void addNewProductToServer(JsonObject jsonObject) {
        String token = AppSettings.getInstance(getActivity()).getStringValue(PrefKeys.token);
        if (token != null && jsonObject != null) {
            ApiClient.addNewProduct(token, jsonObject).enqueue(new Callback<AddNewProductResponse>() {
                @Override
                public void onResponse(Call<AddNewProductResponse> call, retrofit2.Response<AddNewProductResponse> response) {
                    if (response != null && response.body() != null) {
                        if (response.body().getMessage().getCode() == 1) {
                            showProductAddedSuccessDialog();
                        } else
                            Helper.showAlertDialogOK(getActivity(), Helper.getErrorMessages(response.body().getMessage().getCode()));
                    } else
                        Helper.showServerErrorDialog(getActivity());
                }

                @Override
                public void onFailure(Call<AddNewProductResponse> call, Throwable t) {
                   Helper.showServerErrorDialog(getActivity());
                }
            });
        }
    }

创建请求JsonObject,

        JsonObject jsonObject = new JsonObject();
        JsonArray images = new JsonArray();
        try {
            if (productImage != null) {
                JsonObject imgObject = new JsonObject();
                imgObject.addProperty("attachment", productImage.getAttachment());
                imgObject.addProperty("position", 1);
                images.add(imgObject);
            }

            jsonObject.addProperty("name", edtTxtProductName.getText().toString().trim());
            jsonObject.addProperty("short_description", edtTxtShortDescription.getText().toString().trim());
            jsonObject.addProperty("full_description", edtTxtLongDescription.getText().toString().trim());
            jsonObject.addProperty("sku", edtTxtSku.getText().toString().trim());
            jsonObject.addProperty("stock_quantity", Integer.parseInt(edtTxtStockQuantity.getText().toString().trim()));
            jsonObject.addProperty("price", Float.parseFloat(edtTxtPrice.getText().toString().trim()));
            jsonObject.addProperty("images", String.valueOf(images));
            addNewProductToServer(jsonObject);
        } catch (Exception e) {
            e.printStackTrace();
        }

【问题讨论】:

  • 路过时用jsonObject.toString()试试
  • @RaviRupareliya 我需要将 Body 作为字符串传递,对吗?
  • 是的,简而言之就是你的 jsonObject
  • 为什么不将 PoJo 与 GSON 一起使用?
  • @RaviRupareliya 不,它不工作,我修改喜欢,----ApiService.Class----- Call addNewProduct(Header("Authorization") 字符串授权,正文字符串 jsonObject) ----ApiClient.Class------ apiService.addNewProduct(token, jsonObject.toString());

标签: android retrofit2 jsonobjectrequest


【解决方案1】:

创建您的 ModelClass 并设置您的值

public class ModelClass {

@SerializedName("name")
private String name = "";
@SerializedName("short_description")
private String shortDesc = "";
@SerializedName("full_description")
private String fullDescription = "";
@SerializedName("sku")
private String sku = "";
@SerializedName("stock_quantity")
private int qty = 0;
@SerializedName("price")
private double price = 0.0;
@SerializedName("images")
private ArrayList<ImageModel> imageList;


public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getShortDesc() {
    return shortDesc;
}

public void setShortDesc(String shortDesc) {
    this.shortDesc = shortDesc;
}

public String getFullDescription() {
    return fullDescription;
}

public void setFullDescription(String fullDescription) {
    this.fullDescription = fullDescription;
}

public String getSku() {
    return sku;
}

public void setSku(String sku) {
    this.sku = sku;
}

public int getQty() {
    return qty;
}

public void setQty(int qty) {
    this.qty = qty;
}

public double getPrice() {
    return price;
}

public void setPrice(double price) {
    this.price = price;
}

public ArrayList<ImageModel> getImageList() {
    return imageList;
}

public void setImageList(ArrayList<ImageModel> imageList) {
    this.imageList = imageList;
}
}

创建你的 ImageModel 类

private class ImageModel {
@SerializedName("attachment")
private String attachment;
@SerializedName("position")
private int position;

public String getAttachment() {
    return attachment;
}

public void setAttachment(String attachment) {
    this.attachment = attachment;
}

public int getPosition() {
    return position;
}

public void setPosition(int position) {
    this.position = position;
}
}

并通过您的改造实施通过您的课程

@Headers("Content-Type: application/json")
@POST("api/ShopData/AddProduct")
Call<AddNewProductResponse> addNewProduct(@Header("Authorization") String authorization, @Body ModelClass jsonObject);

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    你需要换行

    jsonObject.addProperty("images", String.valueOf(images));
    

    jsonObject.add("images", images);
    

    【讨论】:

    • 让我试试这个。
    • 所以你有另一个错误,但这是将 JsonArray 添加到 JsonObject 的正确方法。
    • 这解决了我的问题。 Base64 图像字符串上有“\n”。感谢您的帮助。
    猜你喜欢
    • 2021-08-20
    • 2019-01-04
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2017-05-23
    • 2017-08-02
    相关资源
    最近更新 更多