How can I use GSON to parse the following JSON object:
{
"ProductsByCategory": [
{.....},
{.....},
{.....},
{.....},
]
}
The JSON object contains an array of elements. I am using GSON to try and parse the JSON and have the following POJO classes to assist me with this.
public class ProductItems {
#SerializedName("ProductsByCategory")
#Expose
private List<ProductsByCategory> productsByCategory = null;
public List<ProductsByCategory> getProductsByCategory() {
return productsByCategory;
}
public void setProductsByCategory(List<ProductsByCategory> productsByCategory) {
this.productsByCategory = productsByCategory;
}
}
public class ProductsByCategory {
#SerializedName("id")
#Expose
private Integer id;
#SerializedName("name")
#Expose
private String name;
#SerializedName("slug")
#Expose
private String slug;
#SerializedName("permalink")
#Expose
private String permalink;
#SerializedName("date_created")
#Expose
private String dateCreated;
#SerializedName("date_created_gmt")
#Expose
private String dateCreatedGmt;
#SerializedName("date_modified")
#Expose
private String dateModified;
#SerializedName("date_modified_gmt")
#Expose
private String dateModifiedGmt;
#SerializedName("type")
#Expose
private String type;
#SerializedName("status")
#Expose
private String status;
#SerializedName("featured")
#Expose
private Boolean featured;
#SerializedName("catalog_visibility")
#Expose
private String catalogVisibility;
#SerializedName("description")
#Expose
private String description;
#SerializedName("short_description")
#Expose
private String shortDescription;
#SerializedName("sku")
#Expose
private String sku;
#SerializedName("price")
#Expose
private String price;
#SerializedName("regular_price")
#Expose
private String regularPrice;
#SerializedName("sale_price")
#Expose
private String salePrice;
#SerializedName("date_on_sale_from")
#Expose
private Object dateOnSaleFrom;
#SerializedName("date_on_sale_from_gmt")
#Expose
private Object dateOnSaleFromGmt;
#SerializedName("date_on_sale_to")
#Expose
private Object dateOnSaleTo;
#SerializedName("date_on_sale_to_gmt")
#Expose
private Object dateOnSaleToGmt;
#SerializedName("price_html")
#Expose
private String priceHtml;
#SerializedName("on_sale")
#Expose
private Boolean onSale;
#SerializedName("purchasable")
#Expose
private Boolean purchasable;
#SerializedName("total_sales")
#Expose
private Integer totalSales;
#SerializedName("virtual")
#Expose
private Boolean virtual;
#SerializedName("downloadable")
#Expose
private Boolean downloadable;
#SerializedName("downloads")
#Expose
private List<Object> downloads = null;
#SerializedName("download_limit")
#Expose
private Integer downloadLimit;
#SerializedName("download_expiry")
#Expose
private Integer downloadExpiry;
#SerializedName("external_url")
#Expose
private String externalUrl;
#SerializedName("button_text")
#Expose
private String buttonText;
#SerializedName("tax_status")
#Expose
private String taxStatus;
#SerializedName("tax_class")
#Expose
private String taxClass;
#SerializedName("manage_stock")
#Expose
private Boolean manageStock;
#SerializedName("stock_quantity")
#Expose
private Integer stockQuantity;
#SerializedName("in_stock")
#Expose
private Boolean inStock;
#SerializedName("backorders")
#Expose
private String backorders;
#SerializedName("backorders_allowed")
#Expose
private Boolean backordersAllowed;
#SerializedName("backordered")
#Expose
private Boolean backordered;
#SerializedName("sold_individually")
#Expose
private Boolean soldIndividually;
#SerializedName("weight")
#Expose
private String weight;
#SerializedName("dimensions")
#Expose
private Dimensions dimensions;
#SerializedName("shipping_required")
#Expose
private Boolean shippingRequired;
#SerializedName("shipping_taxable")
#Expose
private Boolean shippingTaxable;
#SerializedName("shipping_class")
#Expose
private String shippingClass;
#SerializedName("shipping_class_id")
#Expose
private Integer shippingClassId;
#SerializedName("reviews_allowed")
#Expose
private Boolean reviewsAllowed;
#SerializedName("average_rating")
#Expose
private String averageRating;
#SerializedName("rating_count")
#Expose
private Integer ratingCount;
#SerializedName("related_ids")
#Expose
private List<Integer> relatedIds = null;
#SerializedName("upsell_ids")
#Expose
private List<Object> upsellIds = null;
#SerializedName("cross_sell_ids")
#Expose
private List<Object> crossSellIds = null;
#SerializedName("parent_id")
#Expose
private Integer parentId;
#SerializedName("purchase_note")
#Expose
private String purchaseNote;
#SerializedName("categories")
#Expose
private List<Category> categories = null;
#SerializedName("tags")
#Expose
private List<Object> tags = null;
#SerializedName("images")
#Expose
private List<Image> images = null;
#SerializedName("attributes")
#Expose
private List<Attribute> attributes = null;
#SerializedName("default_attributes")
#Expose
private List<Object> defaultAttributes = null;
#SerializedName("variations")
#Expose
private List<Integer> variations = null;
#SerializedName("grouped_products")
#Expose
private List<Object> groupedProducts = null;
#SerializedName("menu_order")
#Expose
private Integer menuOrder;
#SerializedName("meta_data")
#Expose
private List<MetaDatum> metaData = null;
#SerializedName("_links")
#Expose
private Links links;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getPermalink() {
return permalink;
}
public void setPermalink(String permalink) {
this.permalink = permalink;
}
public String getDateCreated() {
return dateCreated;
}
public void setDateCreated(String dateCreated) {
this.dateCreated = dateCreated;
}
public String getDateCreatedGmt() {
return dateCreatedGmt;
}
public void setDateCreatedGmt(String dateCreatedGmt) {
this.dateCreatedGmt = dateCreatedGmt;
}
public String getDateModified() {
return dateModified;
}
public void setDateModified(String dateModified) {
this.dateModified = dateModified;
}
public String getDateModifiedGmt() {
return dateModifiedGmt;
}
public void setDateModifiedGmt(String dateModifiedGmt) {
this.dateModifiedGmt = dateModifiedGmt;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Boolean getFeatured() {
return featured;
}
public void setFeatured(Boolean featured) {
this.featured = featured;
}
public String getCatalogVisibility() {
return catalogVisibility;
}
public void setCatalogVisibility(String catalogVisibility) {
this.catalogVisibility = catalogVisibility;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getShortDescription() {
return shortDescription;
}
public void setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
}
public String getSku() {
return sku;
}
public void setSku(String sku) {
this.sku = sku;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getRegularPrice() {
return regularPrice;
}
public void setRegularPrice(String regularPrice) {
this.regularPrice = regularPrice;
}
public String getSalePrice() {
return salePrice;
}
public void setSalePrice(String salePrice) {
this.salePrice = salePrice;
}
public Object getDateOnSaleFrom() {
return dateOnSaleFrom;
}
public void setDateOnSaleFrom(Object dateOnSaleFrom) {
this.dateOnSaleFrom = dateOnSaleFrom;
}
public Object getDateOnSaleFromGmt() {
return dateOnSaleFromGmt;
}
public void setDateOnSaleFromGmt(Object dateOnSaleFromGmt) {
this.dateOnSaleFromGmt = dateOnSaleFromGmt;
}
public Object getDateOnSaleTo() {
return dateOnSaleTo;
}
public void setDateOnSaleTo(Object dateOnSaleTo) {
this.dateOnSaleTo = dateOnSaleTo;
}
public Object getDateOnSaleToGmt() {
return dateOnSaleToGmt;
}
public void setDateOnSaleToGmt(Object dateOnSaleToGmt) {
this.dateOnSaleToGmt = dateOnSaleToGmt;
}
public String getPriceHtml() {
return priceHtml;
}
public void setPriceHtml(String priceHtml) {
this.priceHtml = priceHtml;
}
public Boolean getOnSale() {
return onSale;
}
public void setOnSale(Boolean onSale) {
this.onSale = onSale;
}
public Boolean getPurchasable() {
return purchasable;
}
public void setPurchasable(Boolean purchasable) {
this.purchasable = purchasable;
}
public Integer getTotalSales() {
return totalSales;
}
public void setTotalSales(Integer totalSales) {
this.totalSales = totalSales;
}
public Boolean getVirtual() {
return virtual;
}
public void setVirtual(Boolean virtual) {
this.virtual = virtual;
}
public Boolean getDownloadable() {
return downloadable;
}
public void setDownloadable(Boolean downloadable) {
this.downloadable = downloadable;
}
public List<Object> getDownloads() {
return downloads;
}
public void setDownloads(List<Object> downloads) {
this.downloads = downloads;
}
public Integer getDownloadLimit() {
return downloadLimit;
}
public void setDownloadLimit(Integer downloadLimit) {
this.downloadLimit = downloadLimit;
}
public Integer getDownloadExpiry() {
return downloadExpiry;
}
public void setDownloadExpiry(Integer downloadExpiry) {
this.downloadExpiry = downloadExpiry;
}
public String getExternalUrl() {
return externalUrl;
}
public void setExternalUrl(String externalUrl) {
this.externalUrl = externalUrl;
}
public String getButtonText() {
return buttonText;
}
public void setButtonText(String buttonText) {
this.buttonText = buttonText;
}
public String getTaxStatus() {
return taxStatus;
}
public void setTaxStatus(String taxStatus) {
this.taxStatus = taxStatus;
}
public String getTaxClass() {
return taxClass;
}
public void setTaxClass(String taxClass) {
this.taxClass = taxClass;
}
public Boolean getManageStock() {
return manageStock;
}
public void setManageStock(Boolean manageStock) {
this.manageStock = manageStock;
}
public Integer getStockQuantity() {
return stockQuantity;
}
public void setStockQuantity(Integer stockQuantity) {
this.stockQuantity = stockQuantity;
}
public Boolean getInStock() {
return inStock;
}
public void setInStock(Boolean inStock) {
this.inStock = inStock;
}
public String getBackorders() {
return backorders;
}
public void setBackorders(String backorders) {
this.backorders = backorders;
}
public Boolean getBackordersAllowed() {
return backordersAllowed;
}
public void setBackordersAllowed(Boolean backordersAllowed) {
this.backordersAllowed = backordersAllowed;
}
public Boolean getBackordered() {
return backordered;
}
public void setBackordered(Boolean backordered) {
this.backordered = backordered;
}
public Boolean getSoldIndividually() {
return soldIndividually;
}
public void setSoldIndividually(Boolean soldIndividually) {
this.soldIndividually = soldIndividually;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public Dimensions getDimensions() {
return dimensions;
}
public void setDimensions(Dimensions dimensions) {
this.dimensions = dimensions;
}
public Boolean getShippingRequired() {
return shippingRequired;
}
public void setShippingRequired(Boolean shippingRequired) {
this.shippingRequired = shippingRequired;
}
public Boolean getShippingTaxable() {
return shippingTaxable;
}
public void setShippingTaxable(Boolean shippingTaxable) {
this.shippingTaxable = shippingTaxable;
}
public String getShippingClass() {
return shippingClass;
}
public void setShippingClass(String shippingClass) {
this.shippingClass = shippingClass;
}
public Integer getShippingClassId() {
return shippingClassId;
}
public void setShippingClassId(Integer shippingClassId) {
this.shippingClassId = shippingClassId;
}
public Boolean getReviewsAllowed() {
return reviewsAllowed;
}
public void setReviewsAllowed(Boolean reviewsAllowed) {
this.reviewsAllowed = reviewsAllowed;
}
public String getAverageRating() {
return averageRating;
}
public void setAverageRating(String averageRating) {
this.averageRating = averageRating;
}
public Integer getRatingCount() {
return ratingCount;
}
public void setRatingCount(Integer ratingCount) {
this.ratingCount = ratingCount;
}
public List<Integer> getRelatedIds() {
return relatedIds;
}
public void setRelatedIds(List<Integer> relatedIds) {
this.relatedIds = relatedIds;
}
public List<Object> getUpsellIds() {
return upsellIds;
}
public void setUpsellIds(List<Object> upsellIds) {
this.upsellIds = upsellIds;
}
public List<Object> getCrossSellIds() {
return crossSellIds;
}
public void setCrossSellIds(List<Object> crossSellIds) {
this.crossSellIds = crossSellIds;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getPurchaseNote() {
return purchaseNote;
}
public void setPurchaseNote(String purchaseNote) {
this.purchaseNote = purchaseNote;
}
public List<Category> getCategories() {
return categories;
}
public void setCategories(List<Category> categories) {
this.categories = categories;
}
public List<Object> getTags() {
return tags;
}
public void setTags(List<Object> tags) {
this.tags = tags;
}
public List<Image> getImages() {
return images;
}
public void setImages(List<Image> images) {
this.images = images;
}
public List<Attribute> getAttributes() {
return attributes;
}
public void setAttributes(List<Attribute> attributes) {
this.attributes = attributes;
}
public List<Object> getDefaultAttributes() {
return defaultAttributes;
}
public void setDefaultAttributes(List<Object> defaultAttributes) {
this.defaultAttributes = defaultAttributes;
}
public List<Integer> getVariations() {
return variations;
}
public void setVariations(List<Integer> variations) {
this.variations = variations;
}
public List<Object> getGroupedProducts() {
return groupedProducts;
}
public void setGroupedProducts(List<Object> groupedProducts) {
this.groupedProducts = groupedProducts;
}
public Integer getMenuOrder() {
return menuOrder;
}
public void setMenuOrder(Integer menuOrder) {
this.menuOrder = menuOrder;
}
public List<MetaDatum> getMetaData() {
return metaData;
}
public void setMetaData(List<MetaDatum> metaData) {
this.metaData = metaData;
}
public Links getLinks() {
return links;
}
public void setLinks(Links links) {
this.links = links;
}
}
The code that I use is the following:
public void onResponse(Call call, Response response) throws IOException
{
String mMessage = response.body().string();
if (response.isSuccessful())
{
try
{
Gson gson = new Gson();
final ProductItems categoryProducts = gson.fromJson(mMessage, ProductItems.class);
response.close();
}
catch (Exception e)
{
Log.e("Error", "Failed to upload");
e.printStackTrace();
}
However, I get the following error: GSON throwing “Expected BEGIN_OBJECT but was BEGIN_ARRAY.
I have tried to change the ProductItems class to taking an object for productbycategories but then I get the following error: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2324 path $.ProductsByCategory[0].meta_data[0].value. I am now a bit confused.
The reason you get this error is that the data is not consistent with the way the POJO is generated.
This is the specific part of the data that has the issue:
"meta_data": [
{
"id": 14232,
"key": "_vc_post_settings",
"value": {
"vc_grid_id": []
}
},
{
"id": 14273,
"key": "fb_product_description",
"value": ""
},
{
"id": 14274,
"key": "fb_visibility",
"value": "1"
},
Notice how the "meta_data" field is an array of objects and that these objects contain a "value" field. The data type of the "value" varies- sometimes it's an object and other times it's a string.
One possible solution would be to change the MetaDatum class so that the value is an Object:
package com.example;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class MetaDatum {
...
#SerializedName("value")
#Expose
private Object value;
...
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
Related
I'm Trying to call API using retrofit in Android. Although I'm successfully able to api in response I'm getting Success Code = 200. But Apart from that Inside Json object Json array is null although while I'm trying to call same api in Postman I'm getting the desire result.
I'm trying to call using POST request
URL Request :- https://example.com/AD1/api/user/profile
I'm passing parameter in Body userid:- MFL176116
Below Postman
APIInterface.java
public interface APIInterface {
#POST("profile")
Call<ProfilePojo> getUserProfile(#Body ProfilePojo profilePojo);
}
ProfilePojo.java
public class ProfilePojo {
#SerializedName("message")
#Expose
private String message;
#SerializedName("code")
#Expose
private Integer code;
#SerializedName("user_data")
#Expose
private List<UserDatum> userData = new ArrayList();
private String userid;
public ProfilePojo(String userid) {
this.userid = userid;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<UserDatum> getUserData() {
return userData;
}
public void setUserData(List<UserDatum> userData) {
this.userData = userData;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public class UserDatum {
#SerializedName("id")
#Expose
private String id;
#SerializedName("username")
#Expose
private String username;
#SerializedName("password")
#Expose
private String password;
#SerializedName("under_id")
#Expose
private String underId;
#SerializedName("place_under_id")
#Expose
private String placeUnderId;
#SerializedName("mobile")
#Expose
private String mobile;
#SerializedName("side")
#Expose
private String side;
#SerializedName("email")
#Expose
private String email;
#SerializedName("status")
#Expose
private String status;
#SerializedName("member_name")
#Expose
private String memberName;
#SerializedName("package_id")
#Expose
private String packageId;
#SerializedName("package_id1")
#Expose
private String packageId1;
#SerializedName("avatar")
#Expose
private String avatar;
#SerializedName("gender")
#Expose
private Object gender;
#SerializedName("date_of_birth")
#Expose
private Object dateOfBirth;
#SerializedName("address_line1")
#Expose
private String addressLine1;
#SerializedName("address_line2")
#Expose
private String addressLine2;
#SerializedName("country")
#Expose
private String country;
#SerializedName("country_code")
#Expose
private String countryCode;
#SerializedName("state")
#Expose
private String state;
#SerializedName("city")
#Expose
private String city;
#SerializedName("pincode")
#Expose
private String pincode;
#SerializedName("pancard_no")
#Expose
private String pancardNo;
#SerializedName("adharcard_no")
#Expose
private String adharcardNo;
#SerializedName("franchaise_type")
#Expose
private String franchaiseType;
#SerializedName("franchise_id")
#Expose
private Object franchiseId;
#SerializedName("franchise_per")
#Expose
private Object franchisePer;
#SerializedName("franchise_status")
#Expose
private Object franchiseStatus;
#SerializedName("transaction_pass")
#Expose
private String transactionPass;
#SerializedName("id_proof")
#Expose
private Object idProof;
#SerializedName("address_proof")
#Expose
private Object addressProof;
#SerializedName("self_video")
#Expose
private String selfVideo;
#SerializedName("residential_proof")
#Expose
private String residentialProof;
#SerializedName("btc_address")
#Expose
private Object btcAddress;
#SerializedName("perfect_money")
#Expose
private Object perfectMoney;
#SerializedName("email_status")
#Expose
private String emailStatus;
#SerializedName("email_verify")
#Expose
private String emailVerify;
#SerializedName("created_on")
#Expose
private String createdOn;
#SerializedName("edited_on")
#Expose
private String editedOn;
#SerializedName("isDeleted")
#Expose
private String isDeleted;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUnderId() {
return underId;
}
public void setUnderId(String underId) {
this.underId = underId;
}
public String getPlaceUnderId() {
return placeUnderId;
}
public void setPlaceUnderId(String placeUnderId) {
this.placeUnderId = placeUnderId;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getSide() {
return side;
}
public void setSide(String side) {
this.side = side;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getPackageId() {
return packageId;
}
public void setPackageId(String packageId) {
this.packageId = packageId;
}
public String getPackageId1() {
return packageId1;
}
public void setPackageId1(String packageId1) {
this.packageId1 = packageId1;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public Object getGender() {
return gender;
}
public void setGender(Object gender) {
this.gender = gender;
}
public Object getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Object dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public String getAddressLine1() {
return addressLine1;
}
public void setAddressLine1(String addressLine1) {
this.addressLine1 = addressLine1;
}
public String getAddressLine2() {
return addressLine2;
}
public void setAddressLine2(String addressLine2) {
this.addressLine2 = addressLine2;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCountryCode() {
return countryCode;
}
public void setCountryCode(String countryCode) {
this.countryCode = countryCode;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getPincode() {
return pincode;
}
public void setPincode(String pincode) {
this.pincode = pincode;
}
public String getPancardNo() {
return pancardNo;
}
public void setPancardNo(String pancardNo) {
this.pancardNo = pancardNo;
}
public String getAdharcardNo() {
return adharcardNo;
}
public void setAdharcardNo(String adharcardNo) {
this.adharcardNo = adharcardNo;
}
public String getFranchaiseType() {
return franchaiseType;
}
public void setFranchaiseType(String franchaiseType) {
this.franchaiseType = franchaiseType;
}
public Object getFranchiseId() {
return franchiseId;
}
public void setFranchiseId(Object franchiseId) {
this.franchiseId = franchiseId;
}
public Object getFranchisePer() {
return franchisePer;
}
public void setFranchisePer(Object franchisePer) {
this.franchisePer = franchisePer;
}
public Object getFranchiseStatus() {
return franchiseStatus;
}
public void setFranchiseStatus(Object franchiseStatus) {
this.franchiseStatus = franchiseStatus;
}
public String getTransactionPass() {
return transactionPass;
}
public void setTransactionPass(String transactionPass) {
this.transactionPass = transactionPass;
}
public Object getIdProof() {
return idProof;
}
public void setIdProof(Object idProof) {
this.idProof = idProof;
}
public Object getAddressProof() {
return addressProof;
}
public void setAddressProof(Object addressProof) {
this.addressProof = addressProof;
}
public String getSelfVideo() {
return selfVideo;
}
public void setSelfVideo(String selfVideo) {
this.selfVideo = selfVideo;
}
public String getResidentialProof() {
return residentialProof;
}
public void setResidentialProof(String residentialProof) {
this.residentialProof = residentialProof;
}
public Object getBtcAddress() {
return btcAddress;
}
public void setBtcAddress(Object btcAddress) {
this.btcAddress = btcAddress;
}
public Object getPerfectMoney() {
return perfectMoney;
}
public void setPerfectMoney(Object perfectMoney) {
this.perfectMoney = perfectMoney;
}
public String getEmailStatus() {
return emailStatus;
}
public void setEmailStatus(String emailStatus) {
this.emailStatus = emailStatus;
}
public String getEmailVerify() {
return emailVerify;
}
public void setEmailVerify(String emailVerify) {
this.emailVerify = emailVerify;
}
public String getCreatedOn() {
return createdOn;
}
public void setCreatedOn(String createdOn) {
this.createdOn = createdOn;
}
public String getEditedOn() {
return editedOn;
}
public void setEditedOn(String editedOn) {
this.editedOn = editedOn;
}
public String getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(String isDeleted) {
this.isDeleted = isDeleted;
}
}
}
Dashboard.java
private void getUserProfile() {
apiInterface = ApiLinks.getClient().create(APIInterface.class);
ProfilePojo profilePojo = new ProfilePojo("MFL176116");
Call<ProfilePojo> call = apiInterface.getUserProfile(profilePojo);
call.enqueue(new Callback<ProfilePojo>() {
#Override
public void onResponse(#NonNull Call<ProfilePojo> call, #NonNull Response<ProfilePojo> response) {
ProfilePojo profilePojo = response.body();
Toast.makeText(getApplicationContext(), "sucess", Toast.LENGTH_LONG).show();
}
#Override
public void onFailure(#NonNull Call<ProfilePojo> call, #NonNull Throwable t) {
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
After debugging the code can see Message is success, code =200, but userdata size ==0 please help me to get rid of this error
Check again the way that you are calling the api, even your userid is getting null, probably it's getting null in the user, but the response is 200 bc there was no error, simply no user with that id.
Here is my response from database
{
"error": false,
"images": [
{
"id": "9",
"url": "http://192.168.1.27/BimbinganPA/include//uploads/9.png"
}
]
}
my response class UserDataResponse.java (edited full data response)
#SerializedName("error")
#Expose
private String iserror;
#SerializedName("error_msg")
#Expose
private String error_msg;
#SerializedName("nama")
#Expose
private String nama;
#SerializedName("nomor_induk")
#Expose
private String nomor_induk;
#SerializedName("prodi")
#Expose
private String prodi;
#SerializedName("dosen_pa")
#Expose
private String dosen_pa;
#SerializedName("email")
#Expose
private String email;
#SerializedName("email2")
#Expose
private String email2;
#SerializedName("mobile_phone")
#Expose
private String mobile_phone;
#SerializedName("mobile_phone2")
#Expose
private String mobile_phone2;
#SerializedName("alamat_mlg")
#Expose
private String alamat_mlg;
#SerializedName("alamat_asal")
#Expose
private String alamat_asal;
#SerializedName("sma_asal")
#Expose
private String sma_asal;
#SerializedName("hobby")
#Expose
private String hobby;
#SerializedName("ekskul")
#Expose
private String ekskul;
#SerializedName("nama_ortu")
#Expose
private String nama_ortu;
#SerializedName("alamat_ortu")
#Expose
private String alamat_ortu;
#SerializedName("email_ortu")
#Expose
private String email_ortu;
#SerializedName("mobilephone_ortu")
#Expose
private String mobilephone_ortu;
#SerializedName("id_fb")
#Expose
private String id_fb;
#SerializedName("id_ig")
#Expose
private String id_ig;
#SerializedName("id_line")
#Expose
private String id_line;
#SerializedName("numb_wa")
#Expose
private String numb_wa;
#SerializedName("images")
#Expose
private List<Image> images = null;
public String getIserror() {
return iserror;
}
public void setIserror(String iserror) {
this.iserror = iserror;
}
public String getMsg() {
return error_msg;
}
public void setMsg(String error_msg) {
this.error_msg = error_msg;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNomor_induk() {
return nomor_induk;
}
public void setNomor_induk(String nomor_induk) {
this.nomor_induk = nomor_induk;
}
public String getProdi() {
return prodi;
}
public void setProdi(String prodi) {
this.prodi = prodi;
}
public String getDosen_pa() {
return dosen_pa;
}
public void setDosen_pa(String dosen_pa) {
this.dosen_pa = dosen_pa;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail2() {
return email2;
}
public void setEmail2(String email2) {
this.email2 = email2;
}
public String getMobile_phone() {
return mobile_phone;
}
public void setMobile_phone(String mobile_phone) {
this.email = mobile_phone;
}
public String getMobile_phone2() {
return mobile_phone2;
}
public void setMobile_phone2(String mobile_phone2) {
this.email = mobile_phone2;
}
public String getAlamat_mlg() {
return alamat_mlg;
}
public void setAlamat_mlg(String alamat_mlg) {
this.alamat_mlg = alamat_mlg;
}
public String getAlamat_asal() {
return alamat_asal;
}
public void setAlamat_asal(String alamat_asal) {
this.alamat_asal = alamat_asal;
}
public String getSma_asal() {
return sma_asal;
}
public void setSma_asal(String sma_asal) {
this.sma_asal = sma_asal;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getEkskul() {
return ekskul;
}
public void setEkskul(String ekskul) {
this.ekskul = ekskul;
}
public String getNama_ortu() {
return nama_ortu;
}
public void setNama_ortu(String nama_ortu) {
this.nama_ortu = nama_ortu;
}
public String getAlamat_ortu() {
return alamat_ortu;
}
public void setAlamat_ortu(String alamat_ortu) {
this.alamat_ortu = alamat_ortu;
}
public String getEmail_ortu() {
return email_ortu;
}
public void setEmail_ortu(String email_ortu) {
this.email_ortu = email_ortu;
}
public String getMobilephone_ortu() {
return mobilephone_ortu;
}
public void setMobilephone_ortu(String mobilephone_ortu) {
this.mobilephone_ortu = mobilephone_ortu;
}
public String getId_fb() {
return id_fb;
}
public void setId_fb(String id_fb) {
this.id_fb = id_fb;
}
public String getId_ig() {
return id_ig;
}
public void setId_ig(String id_ig) {
this.id_ig = id_ig;
}
public String getId_line() {
return id_line;
}
public void setId_line(String id_line) {
this.id_line = id_line;
}
public String getNumb_wa() {
return numb_wa;
}
public void setNumb_wa(String numb_wa) {
this.numb_wa = numb_wa;
}
public List<Image> getImages() {
return images;
}
here is my Image.class
#SerializedName("id")
#Expose
private String no_user_id;
#SerializedName("url")
#Expose
private String image_url;
public String getNo_user_id() {
return no_user_id;
}
public String getImage_url() {
return image_url;
}
this is how i call it
public void F0_getPhoto(){
Call<List<UserDataResponse>> getPhoto = mApiService.getImage(
String.valueOf(mPrefs.getUserID()));
getPhoto.enqueue(new Callback<List<UserDataResponse>>() {
#Override
public void onResponse(Call<List<UserDataResponse>> call, Response<List<UserDataResponse>>response) {
// String iserror = response.body().getIserror();
// Jika login berhasil maka data nama yang ada di response API
// akan diparsing ke activity selanjutnya.
List<UserDataResponse> userDatalist = response.body();
//Creating an String array for the ListView
String[] iserror = new String[userDatalist.size()];
//looping through all the heroes and inserting the names inside the string array
for (int i = 0; i < userDatalist.size(); i++) {
iserror[i] = userDatalist.get(i).getIserror();
if (iserror.equals("false")) {
String[] url = new String[userDatalist.size()];
url[i] = userDatalist.get(i).getImages().getimage_Url();
showPhoto(url);
}
}
#Override
public void onFailure(Call<List<UserDataResponse>> call, Throwable t){
Log.e("debug", "onFailure: ERROR > " + t.toString());
}
});
}
and my question is how i can call response "url" from array i tried to call method getimage_Url() after method getImage() but i cannot call it
url[i] = userDatalist.get(i).getImages().getimage_Url();
According your above json, it's return Object rather than Array. So, modify your F0_getPhoto to handle this.
public void F0_getPhoto(){
Call<UserDataResponse> getPhoto = mApiService.getImage(
String.valueOf(mPrefs.getUserID()));
getPhoto.enqueue(new Callback<UserDataResponse>() {
#Override
public void onResponse(Call<UserDataResponse> call, Response<UserDataResponse>response) {
// String iserror = response.body().getIserror();
// Jika login berhasil maka data nama yang ada di response API
// akan diparsing ke activity selanjutnya.
UserDataResponse userData = response.body();
//Creating an String array for the ListView
String error = userData.getIserror();
List<Image> images = userData.getImages();
String[] url = new String[images.size()];
//looping through all the heroes and inserting the names inside the string array
if (iserror.equals("false")) {
for (int i = 0; i < images.size(); i++) {
url[i] = images.getimage_Url();
}
showPhoto(url);
}
#Override
public void onFailure(Call<UserDataResponse> call, Throwable t){
Log.e("debug", "onFailure: ERROR > " + t.toString());
}
});
}
}
Here is my Retrofit Call...
public void getContests() {
String token = LoginActivity.authToken;
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(OctoInterface.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
OctoInterface api = retrofit.create(OctoInterface.class);
Call<List<OctoModel2>> call = api.getOctoContests(token);
call.enqueue(new Callback<List<OctoModel2>>() {
#Override
public void onResponse(Call<List<OctoModel2>> call, Response<List<OctoModel2>> response) {
int statusCode = response.code();
int i = 0;
if (response.body().size() > titleList.size()) {
for (i = 0; i <= response.body().size() -1; i++) {
contestIdList.add(String.valueOf(response.body().get(i).getId()));
titleList.add(response.body().get(i).getTitle());
subtitleList.add(response.body().get(i).getDescShort());
offerIdList.add(String.valueOf(response.body().get(i).getId()));
offerLogoList.add(response.body().get(i).getLogoUrl());
businessId = String.valueOf(response.body().get(i).getBusinessId());
submit_button_text = response.body().get(i).getSubmitButtonText();
}
}
}
#Override
public void onFailure(Call<List<OctoModel2>> call, Throwable t) {
Log.e("Get Contest failure", call.toString());
t.printStackTrace();
}
});
}
As you can see, I'm currently grabbing the pieces of the response that I need and passing them to individual array lists. I'd much rather pass the entire return into a list of model objects that hold the data.
Here is my POJO class for retrofit...
public class OctoModel2 {
#SerializedName("how_it_works")
#Expose
private List<String> howItWorks = null;
#SerializedName("id")
#Expose
private int id;
#SerializedName("business_id")
#Expose
private int businessId;
#SerializedName("title")
#Expose
private String title;
#SerializedName("desc_short")
#Expose
private String descShort;
#SerializedName("logo_url")
#Expose
private String logoUrl;
#SerializedName("hashtag")
#Expose
private String hashtag;
#SerializedName("confirm_message_title")
#Expose
private String confirmMessageTitle;
#SerializedName("rules")
#Expose
private String rules;
#SerializedName("confirm_message")
#Expose
private String confirmMessage;
#SerializedName("start_date")
#Expose
private String startDate;
#SerializedName("end_date")
#Expose
private String endDate;
#SerializedName("active")
#Expose
private boolean active;
#SerializedName("entry_count")
#Expose
private int entryCount;
#SerializedName("age_required")
#Expose
private int ageRequired;
#SerializedName("submit_button_text")
#Expose
private String submitButtonText;
#SerializedName("hide_redeem_code")
#Expose
private boolean hideRedeemCode;
#SerializedName("redeem_button_text")
#Expose
private String redeemButtonText;
#SerializedName("rules_text")
#Expose
private String rulesText;
#SerializedName("mode")
#Expose
private String mode;
#SerializedName("entry_mode")
#Expose
private String entryMode;
#SerializedName("created_at")
#Expose
private String createdAt;
#SerializedName("updated_at")
#Expose
private String updatedAt;
#SerializedName("deleted_at")
#Expose
private Object deletedAt;
#SerializedName("locations")
#Expose
private List<Location> locations = null;
#SerializedName("entries")
#Expose
private List<Entry> entries = null;
#SerializedName("entry")
#Expose
private Entry entry;
#SerializedName("AWSAccessKeyId")
#Expose
private String aWSAccessKeyId;
#SerializedName("key")
#Expose
private String key;
#SerializedName("policy")
#Expose
private String policy;
#SerializedName("signature")
#Expose
private String signature;
#SerializedName("uuid")
#Expose
private String uuid;
#SerializedName("reward")
#Expose
private Reward reward;
#SerializedName("s3_url")
#Expose
private String s3_url;
public OctoModel2(Integer id, Integer businessId, String title, String descShort, String logoUrl, String hashtag, String confirmMessageTitle, String rules, String confirmMessage, String startDate, String endDate, Boolean active,
String submitButtonText, String redeemButtonText, String rulesText, List<Location> locations, String aWSAccessKeyId, String key, String policy, String signature, String uuid) {
this.id = id;
this.businessId = businessId;
this.title = title;
this.descShort = descShort;
this.logoUrl = logoUrl;
this.hashtag = hashtag;
this.confirmMessageTitle = confirmMessageTitle;
this.rules = rules;
this.confirmMessage = confirmMessage;
this.startDate = startDate;
this.endDate = endDate;
this.active = active;
this.submitButtonText = submitButtonText;
this.redeemButtonText = redeemButtonText;
this.rulesText = rulesText;
this.locations = locations;
this.aWSAccessKeyId = aWSAccessKeyId;
this.key = key;
this.policy = policy;
this.signature = signature;
this.uuid = uuid;
}
public List<String> getHowItWorks() {
return howItWorks;
}
public void setHowItWorks(List<String> howItWorks) {
this.howItWorks = howItWorks;
}
public int getId() {
return id;
}
public List<OctoModel2> getResults() {
return results;
}
public void setId(int id) {
this.id = id;
}
public int getBusinessId() {
return businessId;
}
public void setBusinessId(int businessId) {
this.businessId = businessId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescShort() {
return descShort;
}
public void setDescShort(String descShort) {
this.descShort = descShort;
}
public String getLogoUrl() {
return logoUrl;
}
public void setLogoUrl(String logoUrl) {
this.logoUrl = logoUrl;
}
public String getHashtag() {
return hashtag;
}
public void setHashtag(String hashtag) {
this.hashtag = hashtag;
}
public String getConfirmMessageTitle() {
return confirmMessageTitle;
}
public void setConfirmMessageTitle(String confirmMessageTitle) {
this.confirmMessageTitle = confirmMessageTitle;
}
public String getRules() {
return rules;
}
public void setRules(String rules) {
this.rules = rules;
}
public String getConfirmMessage() {
return confirmMessage;
}
public void setConfirmMessage(String confirmMessage) {
this.confirmMessage = confirmMessage;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public int getEntryCount() {
return entryCount;
}
public void setEntryCount(int entryCount) {
this.entryCount = entryCount;
}
public int getAgeRequired() {
return ageRequired;
}
public void setAgeRequired(int ageRequired) {
this.ageRequired = ageRequired;
}
public String getSubmitButtonText() {
return submitButtonText;
}
public void setSubmitButtonText(String submitButtonText) {
this.submitButtonText = submitButtonText;
}
public boolean isHideRedeemCode() {
return hideRedeemCode;
}
public void setHideRedeemCode(boolean hideRedeemCode) {
this.hideRedeemCode = hideRedeemCode;
}
public String getRedeemButtonText() {
return redeemButtonText;
}
public void setRedeemButtonText(String redeemButtonText) {
this.redeemButtonText = redeemButtonText;
}
public String getRulesText() {
return rulesText;
}
public void setRulesText(String rulesText) {
this.rulesText = rulesText;
}
public String getMode() {
return mode;
}
public void setMode(String mode) {
this.mode = mode;
}
public String getEntryMode() {
return entryMode;
}
public void setEntryMode(String entryMode) {
this.entryMode = entryMode;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}
public Object getDeletedAt() {
return deletedAt;
}
public void setDeletedAt(Object deletedAt) {
this.deletedAt = deletedAt;
}
public List<Location> getLocations() {
return locations;
}
public void setLocations(List<Location> locations) {
this.locations = locations;
}
public List<Entry> getEntries() {
return entries;
}
public void setEntries(List<Entry> entries) {
this.entries = entries;
}
public Entry getEntry() {
return entry;
}
public String getAWSAccessKeyId() {
return aWSAccessKeyId;
}
public void setAWSAccessKeyId(String aWSAccessKeyId) {
this.aWSAccessKeyId = aWSAccessKeyId;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getPolicy() {
return policy;
}
public void setPolicy(String policy) {
this.policy = policy;
}
public String getSignature() {
return signature;
}
public String gets3url() {
return s3_url;
}
public void setSignature(String signature) {
this.signature = signature;
}
public Reward getReward() {
return reward;
}
public void setReward(Reward reward) {
this.reward = reward;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
}
Instead of calling the data from each list like
TitleList.get(position);
SubtitleList.get(position);
LogoUrlList.get(position);
etc...
I'd like to be able to call
Contests.get(position).getTitle();
Contests.get(position).getSubtitle();
Contests.get(position).getLogoUrl();
or however it would be. This would make it better for me to sort the responses and get the data from individual responses without hoping and praying that I'm pulling the correct item from the correct ArrayList.
You need a mapper that maps your DTO (Data Transfer Object) into an entity or list of entities. For example:
public interface Mapper<From, To> {
To map(From value);
}
Now you can create a class, e.g. called `MyRetrofitResponseMapper, that implements the interface and maps the fields needed.
Moreover, you can create multiple mappers that map the same DTO into different entities depending on what DTO fields are required for those.
An example can be found here.
I have a custom object list like bellow :
public List<Message> getMessages() {
return messages;
}
And :
public class Message {
#SerializedName("id")
#Expose
private String id;
#SerializedName("useridfrom")
#Expose
private String useridfrom;
#SerializedName("useridto")
#Expose
private String useridto;
#SerializedName("subject")
#Expose
private String subject;
#SerializedName("fullmessage")
#Expose
private String fullmessage;
#SerializedName("fullmessageformat")
#Expose
private String fullmessageformat;
#SerializedName("fullmessagehtml")
#Expose
private String fullmessagehtml;
#SerializedName("smallmessage")
#Expose
private String smallmessage;
#SerializedName("notification")
#Expose
private String notification;
#SerializedName("contexturl")
#Expose
private Object contexturl;
#SerializedName("contexturlname")
#Expose
private Object contexturlname;
#SerializedName("timecreated")
#Expose
private String timecreated;
#SerializedName("timeuserfromdeleted")
#Expose
private String timeuserfromdeleted;
#SerializedName("timeusertodeleted")
#Expose
private String timeusertodeleted;
#SerializedName("component")
#Expose
private String component;
#SerializedName("eventtype")
#Expose
private String eventtype;
#SerializedName("userfromfirstnamephonetic")
#Expose
private String userfromfirstnamephonetic;
#SerializedName("userfromlastnamephonetic")
#Expose
private String userfromlastnamephonetic;
#SerializedName("userfrommiddlename")
#Expose
private String userfrommiddlename;
#SerializedName("userfromalternatename")
#Expose
private String userfromalternatename;
#SerializedName("userfromfirstname")
#Expose
private String userfromfirstname;
#SerializedName("userfromlastname")
#Expose
private String userfromlastname;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUseridfrom() {
return useridfrom;
}
public void setUseridfrom(String useridfrom) {
this.useridfrom = useridfrom;
}
public String getUseridto() {
return useridto;
}
public void setUseridto(String useridto) {
this.useridto = useridto;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getFullmessage() {
return fullmessage;
}
public void setFullmessage(String fullmessage) {
this.fullmessage = fullmessage;
}
public String getFullmessageformat() {
return fullmessageformat;
}
public void setFullmessageformat(String fullmessageformat) {
this.fullmessageformat = fullmessageformat;
}
public String getFullmessagehtml() {
return fullmessagehtml;
}
public void setFullmessagehtml(String fullmessagehtml) {
this.fullmessagehtml = fullmessagehtml;
}
public String getSmallmessage() {
return smallmessage;
}
public void setSmallmessage(String smallmessage) {
this.smallmessage = smallmessage;
}
public String getNotification() {
return notification;
}
public void setNotification(String notification) {
this.notification = notification;
}
public Object getContexturl() {
return contexturl;
}
public void setContexturl(Object contexturl) {
this.contexturl = contexturl;
}
public Object getContexturlname() {
return contexturlname;
}
public void setContexturlname(Object contexturlname) {
this.contexturlname = contexturlname;
}
public String getTimecreated() {
return timecreated;
}
public void setTimecreated(String timecreated) {
this.timecreated = timecreated;
}
public String getTimeuserfromdeleted() {
return timeuserfromdeleted;
}
public void setTimeuserfromdeleted(String timeuserfromdeleted) {
this.timeuserfromdeleted = timeuserfromdeleted;
}
public String getTimeusertodeleted() {
return timeusertodeleted;
}
public void setTimeusertodeleted(String timeusertodeleted) {
this.timeusertodeleted = timeusertodeleted;
}
public String getComponent() {
return component;
}
public void setComponent(String component) {
this.component = component;
}
public String getEventtype() {
return eventtype;
}
public void setEventtype(String eventtype) {
this.eventtype = eventtype;
}
public String getUserfromfirstnamephonetic() {
return userfromfirstnamephonetic;
}
public void setUserfromfirstnamephonetic(String userfromfirstnamephonetic) {
this.userfromfirstnamephonetic = userfromfirstnamephonetic;
}
public String getUserfromlastnamephonetic() {
return userfromlastnamephonetic;
}
public void setUserfromlastnamephonetic(String userfromlastnamephonetic) {
this.userfromlastnamephonetic = userfromlastnamephonetic;
}
public String getUserfrommiddlename() {
return userfrommiddlename;
}
public void setUserfrommiddlename(String userfrommiddlename) {
this.userfrommiddlename = userfrommiddlename;
}
public String getUserfromalternatename() {
return userfromalternatename;
}
public void setUserfromalternatename(String userfromalternatename) {
this.userfromalternatename = userfromalternatename;
}
public String getUserfromfirstname() {
return userfromfirstname;
}
public void setUserfromfirstname(String userfromfirstname) {
this.userfromfirstname = userfromfirstname;
}
public String getUserfromlastname() {
return userfromlastname;
}
public void setUserfromlastname(String userfromlastname) {
this.userfromlastname = userfromlastname;
}
}
How can I count duplicate items : useridfrom and useridto.
I like use from RXJava for better performance an do in background.
This is the response JSON from Volley:
{
"status":true,
"data":{
"product_id":"12",
"product_ogpm_id":"OGPR1000485",
"product_part_number":"6ED1 057-1AA01-0BA0",
"escape_part_number":"6ed10571aa010ba0",
"product_name":"USB PC Cable",
"product_uom":"",
"product_image":"",
"product_description":"",
"product_manufacturer":"Siemens",
"manufacturer_id":"4",
"replace_id":"0",
"replace_date":"0000-00-00 00:00:00",
"product_added_date":"2017-09-12 00:57:15",
"product_added_by":"Jayank Chopra",
"product_modified_date":"0000-00-00 00:00:00",
"product_modified_by":"",
"product_status":"1",
"manufacturer_name":"Siemens",
"contracted_id":"1",
"data_sheets":[
]
},
"message":"Product found!"
}
For Parsing I use Gson Like this:
/* BarcodeSearchResponse responseObj = new Gson().fromJson(responseJson.toString(), BarcodeSearchResponse.class);
where BarcodeSearchResponse class is this:
public class BarcodeSearchResponse{
public ArrayList<ScanData> data;
}
*/
And ScanData is a class that contains :
public class ScanData implements Parcelable{
#SerializedName("product_id")
#Expose
private String productId;
#SerializedName("product_ogpm_id")
#Expose
private String productOgpmId;
#SerializedName("product_part_number")
#Expose
private String productPartNumber;
#SerializedName("escape_part_number")
#Expose
private String escapePartNumber;
#SerializedName("product_name")
#Expose
private String productName;
#SerializedName("product_uom")
#Expose
private String productUom;
#SerializedName("product_image")
#Expose
private String productImage;
#SerializedName("product_description")
#Expose
private String productDescription;
#SerializedName("product_manufacturer")
#Expose
private String productManufacturer;
#SerializedName("manufacturer_id")
#Expose
private String manufacturerId;
#SerializedName("replace_id")
#Expose
private String replaceId;
#SerializedName("replace_date")
#Expose
private String replaceDate;
#SerializedName("product_added_date")
#Expose
private String productAddedDate;
#SerializedName("product_added_by")
#Expose
private String productAddedBy;
#SerializedName("product_modified_date")
#Expose
private String productModifiedDate;
#SerializedName("product_modified_by")
#Expose
private String productModifiedBy;
#SerializedName("product_status")
#Expose
private String productStatus;
#SerializedName("manufacturer_name")
#Expose
private String manufacturerName;
#SerializedName("contracted_id")
#Expose
private String contractedId;
#SerializedName("data_sheets")
#Expose
private List<Object> dataSheets = null;
protected ScanData(Parcel in) {
productId = in.readString();
productOgpmId = in.readString();
productPartNumber = in.readString();
escapePartNumber = in.readString();
productName = in.readString();
productUom = in.readString();
productImage = in.readString();
productDescription = in.readString();
productManufacturer = in.readString();
manufacturerId = in.readString();
replaceId = in.readString();
replaceDate = in.readString();
productAddedDate = in.readString();
productAddedBy = in.readString();
productModifiedDate = in.readString();
productModifiedBy = in.readString();
productStatus = in.readString();
manufacturerName = in.readString();
contractedId = in.readString();
}
public static final Creator<ScanData> CREATOR = new Creator<ScanData>() {
#Override
public ScanData createFromParcel(Parcel in) {
return new ScanData(in);
}
#Override
public ScanData[] newArray(int size) {
return new ScanData[size];
}
};
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getProductOgpmId() {
return productOgpmId;
}
public void setProductOgpmId(String productOgpmId) {
this.productOgpmId = productOgpmId;
}
public String getProductPartNumber() {
return productPartNumber;
}
public void setProductPartNumber(String productPartNumber) {
this.productPartNumber = productPartNumber;
}
public String getEscapePartNumber() {
return escapePartNumber;
}
public void setEscapePartNumber(String escapePartNumber) {
this.escapePartNumber = escapePartNumber;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductUom() {
return productUom;
}
public void setProductUom(String productUom) {
this.productUom = productUom;
}
public String getProductImage() {
return productImage;
}
public void setProductImage(String productImage) {
this.productImage = productImage;
}
public String getProductDescription() {
return productDescription;
}
public void setProductDescription(String productDescription) {
this.productDescription = productDescription;
}
public String getProductManufacturer() {
return productManufacturer;
}
public void setProductManufacturer(String productManufacturer) {
this.productManufacturer = productManufacturer;
}
public String getManufacturerId() {
return manufacturerId;
}
public void setManufacturerId(String manufacturerId) {
this.manufacturerId = manufacturerId;
}
public String getReplaceId() {
return replaceId;
}
public void setReplaceId(String replaceId) {
this.replaceId = replaceId;
}
public String getReplaceDate() {
return replaceDate;
}
public void setReplaceDate(String replaceDate) {
this.replaceDate = replaceDate;
}
public String getProductAddedDate() {
return productAddedDate;
}
public void setProductAddedDate(String productAddedDate) {
this.productAddedDate = productAddedDate;
}
public String getProductAddedBy() {
return productAddedBy;
}
public void setProductAddedBy(String productAddedBy) {
this.productAddedBy = productAddedBy;
}
public String getProductModifiedDate() {
return productModifiedDate;
}
public void setProductModifiedDate(String productModifiedDate) {
this.productModifiedDate = productModifiedDate;
}
public String getProductModifiedBy() {
return productModifiedBy;
}
public void setProductModifiedBy(String productModifiedBy) {
this.productModifiedBy = productModifiedBy;
}
public String getProductStatus() {
return productStatus;
}
public void setProductStatus(String productStatus) {
this.productStatus = productStatus;
}
public String getManufacturerName() {
return manufacturerName;
}
public void setManufacturerName(String manufacturerName) {
this.manufacturerName = manufacturerName;
}
public String getContractedId() {
return contractedId;
}
public void setContractedId(String contractedId) {
this.contractedId = contractedId;
}
public List<Object> getDataSheets() {
return dataSheets;
}
public void setDataSheets(List<Object> dataSheets) {
this.dataSheets = dataSheets;
}
#Override
public int describeContents() {
return 0;
}
#Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(productId);
parcel.writeString(productOgpmId);
parcel.writeString(productPartNumber);
parcel.writeString(escapePartNumber);
parcel.writeString(productName);
parcel.writeString(productUom);
parcel.writeString(productImage);
parcel.writeString(productDescription);
parcel.writeString(productManufacturer);
parcel.writeString(manufacturerId);
parcel.writeString(replaceId);
parcel.writeString(replaceDate);
parcel.writeString(productAddedDate);
parcel.writeString(productAddedBy);
parcel.writeString(productModifiedDate);
parcel.writeString(productModifiedBy);
parcel.writeString(productStatus);
parcel.writeString(manufacturerName);
parcel.writeString(contractedId);
}
}*/
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 24 path
$.data
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read
Please recheck your data. Maybe it look like bellow
{
"status": true,
"data": [
{
"product_id": "12",
"product_ogpm_id": "OGPR1000485",
"product_part_number": "6ED1 057-1AA01-0BA0",
"escape_part_number": "6ed10571aa010ba0",
"product_name": "USB PC Cable",
"product_uom": "",
"product_image": "",
"product_description": "",
"product_manufacturer": "Siemens",
"manufacturer_id": "4",
"replace_id": "0",
"replace_date": "0000-00-00 00:00:00",
"product_added_date": "2017-09-12 00:57:15",
"product_added_by": "Jayank Chopra",
"product_modified_date": "0000-00-00 00:00:00",
"product_modified_by": "",
"product_status": "1",
"manufacturer_name": "Siemens",
"contracted_id": "1",
"data_sheets": []
},
{
"product_id": "13",
"product_ogpm_id": "OGPR1000485",
"product_part_number": "6ED1 057-1AA01-0BA0",
"escape_part_number": "6ed10571aa010ba0",
"product_name": "USB PC Cable",
"product_uom": "",
"product_image": "",
"product_description": "",
"product_manufacturer": "Siemens",
"manufacturer_id": "4",
"replace_id": "0",
"replace_date": "0000-00-00 00:00:00",
"product_added_date": "2017-09-12 00:57:15",
"product_added_by": "Jayank Chopra",
"product_modified_date": "0000-00-00 00:00:00",
"product_modified_by": "",
"product_status": "1",
"manufacturer_name": "Siemens",
"contracted_id": "1",
"data_sheets": []
}
],
"message": "Product found!"
}
or if it same with you posted
Please make sure the BarcodeSearchResponse look like this:
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class BarcodeSearchResponse {
#SerializedName("status")
#Expose
private boolean status;
#SerializedName("data")
#Expose
private ScanData data;
#SerializedName("message")
#Expose
private String message;
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public ScanData getData() {
return data;
}
public void setData(ScanData data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
Your POJO looks wrong. Your Data Class should look like this.
public class Data {
#SerializedName("product_id")
#Expose
private String productId;
#SerializedName("product_ogpm_id")
#Expose
private String productOgpmId;
#SerializedName("product_part_number")
#Expose
private String productPartNumber;
#SerializedName("escape_part_number")
#Expose
private String escapePartNumber;
#SerializedName("product_name")
#Expose
private String productName;
#SerializedName("product_uom")
#Expose
private String productUom;
#SerializedName("product_image")
#Expose
private String productImage;
#SerializedName("product_description")
#Expose
private String productDescription;
#SerializedName("product_manufacturer")
#Expose
private String productManufacturer;
#SerializedName("manufacturer_id")
#Expose
private String manufacturerId;
#SerializedName("replace_id")
#Expose
private String replaceId;
#SerializedName("replace_date")
#Expose
private String replaceDate;
#SerializedName("product_added_date")
#Expose
private String productAddedDate;
#SerializedName("product_added_by")
#Expose
private String productAddedBy;
#SerializedName("product_modified_date")
#Expose
private String productModifiedDate;
#SerializedName("product_modified_by")
#Expose
private String productModifiedBy;
#SerializedName("product_status")
#Expose
private String productStatus;
#SerializedName("manufacturer_name")
#Expose
private String manufacturerName;
#SerializedName("contracted_id")
#Expose
private String contractedId;
#SerializedName("data_sheets")
#Expose
private List<Object> dataSheets = null;
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getProductOgpmId() {
return productOgpmId;
}
public void setProductOgpmId(String productOgpmId) {
this.productOgpmId = productOgpmId;
}
public String getProductPartNumber() {
return productPartNumber;
}
public void setProductPartNumber(String productPartNumber) {
this.productPartNumber = productPartNumber;
}
public String getEscapePartNumber() {
return escapePartNumber;
}
public void setEscapePartNumber(String escapePartNumber) {
this.escapePartNumber = escapePartNumber;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductUom() {
return productUom;
}
public void setProductUom(String productUom) {
this.productUom = productUom;
}
public String getProductImage() {
return productImage;
}
public void setProductImage(String productImage) {
this.productImage = productImage;
}
public String getProductDescription() {
return productDescription;
}
public void setProductDescription(String productDescription) {
this.productDescription = productDescription;
}
public String getProductManufacturer() {
return productManufacturer;
}
public void setProductManufacturer(String productManufacturer) {
this.productManufacturer = productManufacturer;
}
public String getManufacturerId() {
return manufacturerId;
}
public void setManufacturerId(String manufacturerId) {
this.manufacturerId = manufacturerId;
}
public String getReplaceId() {
return replaceId;
}
public void setReplaceId(String replaceId) {
this.replaceId = replaceId;
}
public String getReplaceDate() {
return replaceDate;
}
public void setReplaceDate(String replaceDate) {
this.replaceDate = replaceDate;
}
public String getProductAddedDate() {
return productAddedDate;
}
public void setProductAddedDate(String productAddedDate) {
this.productAddedDate = productAddedDate;
}
public String getProductAddedBy() {
return productAddedBy;
}
public void setProductAddedBy(String productAddedBy) {
this.productAddedBy = productAddedBy;
}
public String getProductModifiedDate() {
return productModifiedDate;
}
public void setProductModifiedDate(String productModifiedDate) {
this.productModifiedDate = productModifiedDate;
}
public String getProductModifiedBy() {
return productModifiedBy;
}
public void setProductModifiedBy(String productModifiedBy) {
this.productModifiedBy = productModifiedBy;
}
public String getProductStatus() {
return productStatus;
}
public void setProductStatus(String productStatus) {
this.productStatus = productStatus;
}
public String getManufacturerName() {
return manufacturerName;
}
public void setManufacturerName(String manufacturerName) {
this.manufacturerName = manufacturerName;
}
public String getContractedId() {
return contractedId;
}
public void setContractedId(String contractedId) {
this.contractedId = contractedId;
}
public List<Object> getDataSheets() {
return dataSheets;
}
public void setDataSheets(List<Object> dataSheets) {
this.dataSheets = dataSheets;
}
}
And your ScanData Class should use this Data Class as following.
public class ScanData {
#SerializedName("status")
#Expose
private Boolean status;
#SerializedName("data")
#Expose
private Data data;
#SerializedName("message")
#Expose
private String message;
public Boolean getStatus() {
return status;
}
public void setStatus(Boolean status) {
this.status = status;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
P.S.
I have not made it parcelable, I guess you can do that by yourself.