Текст возвращается ноль при разборе с модернизацией - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь разобрать простой json (упомянутый ниже) и устанавливаю значения для textViews.Я использую модификацию и GSON конвертер.Но, устанавливая значения в textviw, он возвращает мне ноль.Я уже разобрал значения в переработке, что довольно просто.Но в простом ответе я мог бы сделать небольшую ошибку, но не смог ее найти.

Помощь будет принята с благодарностью.

ItemDescriptionInterface

public interface ItemDescriptionInterface {
    @GET("getProductDetailByProductId?ProductId=3")
    Call<JsonObject> ITEM_DESCRIPTION_RESPONSE_CALL();
}

Activity

private void GetItemDescription () {

    Retrofit retrofit2 = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();


    ItemDescriptionInterface apiService = retrofit2.create(ItemDescriptionInterface.class);
    Call<JsonObject> jsonCall = apiService.ITEM_DESCRIPTION_RESPONSE_CALL();
    jsonCall.enqueue(new Callback<JsonObject>() {
        @Override
        public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {

            String jsonString = response.body().toString();
            Gson gson = new Gson();
            ItemDescriptionModel model = gson.fromJson(jsonString, ItemDescriptionModel.class);
            price.setText(model.getResult().getActualPrice());//Here its not getting 

        }
        @Override
        public void onFailure(Call<JsonObject> call, Throwable t) {
            String msg = (t.getMessage() == null) ? "Login failed!" : t.getMessage();
            Log.d("descriptionofproduct", msg);
        }
    });

JSON-ответ Я получаю:

{
  "status": "Success",
  "response_code": 200,
  "result": [
    {
      "PId": "3",
      "ProductId": "3",
      "VendorId": "admin",
      "ProductName": "Golden Green",
      "ProductAlias": "golden-green-full-rim-",
      "MarketPrice": "500",
      "ActualPrice": "450",
      "PurchasePrice": "450",
      "Style": "3",
      "DefaultImage_url": "http:\/\/lensclone.tk\/test\.png"
    }
  ]
}

Модель

public class ItemDescriptionModel {

@SerializedName("ActualPrice")
private String price;

@SerializedName("ProductDetails")
private String productDetails;

@SerializedName("DefaultImage_url")
private String imgurl;

@SerializedName("ProductName")
private String ProductName;

public ItemDescriptionModel(String price, String productDetails, String imgurl, String productName) {
    this.price = price;
    this.productDetails = productDetails;
    this.imgurl = imgurl;
    ProductName = productName;
}

public String getPrice() {
    return price;
}

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

public String getProductDetails() {
    return productDetails;
}

public void setProductDetails(String productDetails) {
    this.productDetails = productDetails;
}

public String getImgurl() {
    return imgurl;
}

public void setImgurl(String imgurl) {
    this.imgurl = imgurl;
}

public String getProductName() {
    return ProductName;
}

public void setProductName(String productName) {
    ProductName = productName;
}

}

Я хочу показать только фактическую цену.

Дайте мне знать, если я что-то упустил.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Измени это.

public interface ItemDescriptionInterface {
    @GET("getProductDetailByProductId?ProductId=3")
    Call<ItemDescriptionModel> ITEM_DESCRIPTION_RESPONSE_CALL();
}
        Call<ItemDescriptionModel> itemDescriptionModelCall= apiService.ITEM_DESCRIPTION_RESPONSE_CALL();
    itemDescriptionModelCall.enqueue(new Callback<ItemDescriptionModel>() {
        @Override
        public void onResponse(Call<ItemDescriptionModel> call, retrofit2.Response<ItemDescriptionModel> response) {
            if (response!=null && response.isSuccessful() && response.body()!=null){
                String prince=response.body().getPrice();
            }
        }

        @Override
        public void onFailure(Call<ItemDescriptionModel> call, Throwable t) {

        }
    });
0 голосов
/ 16 мая 2018

ItemDescriptionInterface

public interface ItemDescriptionInterface {
    @GET("getProductDetailByProductId?ProductId=3")
    Call<ItemDescriptionModel> ITEM_DESCRIPTION_RESPONSE_CALL();
}

активность

Retrofit retrofit2 = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    ItemDescriptionInterface apiService = retrofit2.create(ItemDescriptionInterface.class);

    Call<ItemDescriptionModel> jsonCall = apiService.ITEM_DESCRIPTION_RESPONSE_CALL();
    jsonCall.enqueue(new Callback<ItemDescriptionModel>() {
        @Override
        public void onResponse(Call<ItemDescriptionModel> call, Response<ItemDescriptionModel> response) {

            ItemDescriptionModel model = (ItemDescriptionModel) response.body();
            price.setText(model.getResult().get(0).getActualPrice());
        }
    }

Модель

public class ItemDescriptionModel {

@SerializedName("status")
private String status;

@SerializedName("response_code")
private String response_code;

@SerializedName("result")
private List<Results> result;

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getResponse_code() {
    return response_code;
}

public void setResponse_code(String response_code) {
    this.response_code = response_code;
}

public List<Results> getResult() {
    return result;
}

public void setResult(List<Results> result) {
    this.result = result;
}

private class Results {

    @SerializedName("PId")
    private String PId;

    @SerializedName("ProductId")
    private String ProductId;

    @SerializedName("VendorId")
    private String VendorId;

    @SerializedName("ProductName")
    private String ProductName;

    @SerializedName("ProductAlias")
    private String ProductAlias;

    @SerializedName("MarketPrice")
    private String MarketPrice;

    @SerializedName("ActualPrice")
    private String ActualPrice;

    @SerializedName("PurchasePrice")
    private String PurchasePrice;

    @SerializedName("Style")
    private String Style;

    @SerializedName("DefaultImage_url")
    private String DefaultImage_url;

    public String getPId() {
        return PId;
    }

    public void setPId(String PId) {
        this.PId = PId;
    }

    public String getProductId() {
        return ProductId;
    }

    public void setProductId(String productId) {
        ProductId = productId;
    }

    public String getVendorId() {
        return VendorId;
    }

    public void setVendorId(String vendorId) {
        VendorId = vendorId;
    }

    public String getProductName() {
        return ProductName;
    }

    public void setProductName(String productName) {
        ProductName = productName;
    }

    public String getProductAlias() {
        return ProductAlias;
    }

    public void setProductAlias(String productAlias) {
        ProductAlias = productAlias;
    }

    public String getMarketPrice() {
        return MarketPrice;
    }

    public void setMarketPrice(String marketPrice) {
        MarketPrice = marketPrice;
    }

    public String getActualPrice() {
        return ActualPrice;
    }

    public void setActualPrice(String actualPrice) {
        ActualPrice = actualPrice;
    }

    public String getPurchasePrice() {
        return PurchasePrice;
    }

    public void setPurchasePrice(String purchasePrice) {
        PurchasePrice = purchasePrice;
    }

    public String getStyle() {
        return Style;
    }

    public void setStyle(String style) {
        Style = style;
    }

    public String getDefaultImage_url() {
        return DefaultImage_url;
    }

    public void setDefaultImage_url(String defaultImage_url) {
        DefaultImage_url = defaultImage_url;
    }
}}
0 голосов
/ 16 мая 2018

После того, как вы успешно получили правильный ответ, вы неправильно анализируете json.Объект model не содержит ActualPrice, его необходимо анализировать дальше от полученного json.

Вам необходимо создать классы моделей для объекта ответа (ItemDescriptionModel), а также для любых вложенных объектов.в ответ JSON, как result здесь.Вы также можете использовать онлайн-инструменты, такие как JsontoJava и т. Д., Которые могут генерировать требуемый класс модели.

Как только класс модели будет создан, как требуется,

Заменить

price.setText(model.getPrice());

с

price.setText(model.getResult().getPrice());
...