Cant get the getUrl() in to onBindViewHolder? - java

I have a ListSourceAdapter.java class,
class ListSourceViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ItemClickListener itemClickListener;
TextView source_title;
CircleImageView source_image;
public ListSourceViewHolder(View itemView) {
super(itemView);
source_title = (TextView) itemView.findViewById(R.id.source_name);
source_image = (CircleImageView) itemView.findViewById(R.id.source_image);
}
#Override
public void onClick(View v) {
itemClickListener.onClick(v, getAdapterPosition(), false);
}
}
public class ListSourceAdapter extends RecyclerView.Adapter<ListSourceViewHolder> {
private Context context;
private WebSite webSite;
public ListSourceAdapter(Context context, WebSite webSite) {
this.context = context;
this.webSite = webSite;
}
#Override
public ListSourceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View itemView = inflater.inflate(R.layout.source_layout, parent, false);
return new ListSourceViewHolder(itemView);
}
#Override
public void onBindViewHolder(ListSourceViewHolder holder, int position) {
StringBuilder iconBetterAPI = new StringBuilder("https://icons.better-idea.org/allicons.json?url=");
iconBetterAPI.append(webSite.getSources().get(position).getUrl());
}
#Override
public int getItemCount() {
return webSite.getSources().size();
}
}
in onBindView Im try to use getUrl() but it says cannot resolve method
my WebSite.java model class like below
public class WebSite {
private String status;
private List<Source> sources;
public WebSite() {
}
public WebSite(String status, List<Source> sources) {
this.status = status;
this.sources = sources;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<Source> getSources() {
return sources;
}
public void setSources(List<Source> sources) {
this.sources = sources;
}
}
Source.java file like below
class UrlsToLogs {
private String small, medium, large;
public String getSmall() {
return small;
}
public void setSmall(String small) {
this.small = small;
}
public String getMedium() {
return medium;
}
public void setMedium(String medium) {
this.medium = medium;
}
public String getLarge() {
return large;
}
public void setLarge(String large) {
this.large = large;
}
}
public class Source {
private String id, name, description, url, category, language, country;
private UrlsToLogs urlsToLogs;
private List<String> sortByAvailable;
public Source() {
}
public Source(String id, String name, String description, String url, String category, String language, String country, UrlsToLogs urlsToLogs, List<String> sortByAvailable) {
this.id = id;
this.name = name;
this.description = description;
this.url = url;
this.category = category;
this.language = language;
this.country = country;
this.urlsToLogs = urlsToLogs;
this.sortByAvailable = sortByAvailable;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public UrlsToLogs getUrlsToLogs() {
return urlsToLogs;
}
public void setUrlsToLogs(UrlsToLogs urlsToLogs) {
this.urlsToLogs = urlsToLogs;
}
public List<String> getSortByAvailable() {
return sortByAvailable;
}
public void setSortByAvailable(List<String> sortByAvailable) {
this.sortByAvailable = sortByAvailable;
}
}
IconBetterIdeaService interface like below
public interface IconBetterIdeaService {
#GET
Call<IconBetterIdea> getIconUrl(#Url String url);
}
ItemClickListner interface like below
public interface ItemClickListener {
void onClick(View view, int position, boolean isLongClick);
}
why I can't access getUrl(), what did I do wrong in my code?

Try this create separate class like this
public class WebSite {
private String status;
private List<Source> sources;
public WebSite() {
}
public WebSite(String status, List<Source> sources) {
this.status = status;
this.sources = sources;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<Source> getSources() {
return sources;
}
public void setSources(List<Source> sources) {
this.sources = sources;
}
}
than
public class Source {
private String id, name, description, url, category, language, country;
private UrlsToLogs urlsToLogs;
private List<String> sortByAvailable;
public Source() {
}
public Source(String id, String name, String description, String url, String category, String language, String country, UrlsToLogs urlsToLogs, List<String> sortByAvailable) {
this.id = id;
this.name = name;
this.description = description;
this.url = url;
this.category = category;
this.language = language;
this.country = country;
this.urlsToLogs = urlsToLogs;
this.sortByAvailable = sortByAvailable;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public UrlsToLogs getUrlsToLogs() {
return urlsToLogs;
}
public void setUrlsToLogs(UrlsToLogs urlsToLogs) {
this.urlsToLogs = urlsToLogs;
}
public List<String> getSortByAvailable() {
return sortByAvailable;
}
public void setSortByAvailable(List<String> sortByAvailable) {
this.sortByAvailable = sortByAvailable;
}
}
than
public class UrlsToLogs {
private String small, medium, large;
public String getSmall() {
return small;
}
public void setSmall(String small) {
this.small = small;
}
public String getMedium() {
return medium;
}
public void setMedium(String medium) {
this.medium = medium;
}
public String getLarge() {
return large;
}
public void setLarge(String large) {
this.large = large;
}
}
OUTPUT
Clear-Rebuild and also check the imports

Related

How to Fetch data from API using Retrofit in Android

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.

firebase DatabaseException: Expected a List while deserializing, but got a class java.util.HashMap

I have initialized the arraylist globally(mDataset). I'm trying to populate the arraylist based on some conditions.
code snippet in which error is occurring.
Error is occurring when i try to initialize object product with the value received from the fire.getValue() in for loop
mProductReference.child("Electronics").addListenerForSingleValueEvent(new ValueEventListener() {
#Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot fire : dataSnapshot.getChildren())
{
Product product = fire.getValue(Product.class);
if(product.getId().equals(key)) {
mDataSet.add(product);
}
//Toast.makeText(MyProduct.this,mDataSet.size()+ "", Toast.LENGTH_SHORT).show();
}
mAdapter.refresh(mDataSet);
mRecyclerView.setAdapter(mAdapter);
}
#Override
public void onCancelled(DatabaseError databaseError) {
}
});
POJO(Product.java)
public class Product {
String name,desc,image,id,userid,category;
long price,quantity,noOfRating;
long rating;
ArrayList<Review> review;
public Product() {
}
public Product(String name, String desc, String image, String id, String userid, String category, long price, long quantity, long noOfRating, long rating, ArrayList<Review> review) {
this.name = name;
this.desc = desc;
this.image = image;
this.id = id;
this.userid = userid;
this.category = category;
this.price = price;
this.quantity = quantity;
this.noOfRating = noOfRating;
this.rating = rating;
this.review = review;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public long getPrice() {
return price;
}
public void setPrice(long price) {
this.price = price;
}
public long getQuantity() {
return quantity;
}
public void setQuantity(long quantity) {
this.quantity = quantity;
}
public long getNoOfRating() {
return noOfRating;
}
public void setNoOfRating(long noOfRating) {
this.noOfRating = noOfRating;
}
public long getRating() {
return rating;
}
public void setRating(long rating) {
this.rating = rating;
}
public ArrayList<Review> getReview() {
return review;
}
public void setReview(ArrayList<Review> review) {
this.review = review;
}}
It is working in some other activity but causing problem in this one.

ObjectMapper can't map the variables of inner class

ObjectMapper mapper = new ObjectMapper();
try {
attractionMainResponse = mapper.readValue(response,AttractionMainResponse.class);
} catch(IOException io) {
showToast("Something went wrong");
FirebaseCrash.log(io.toString());
finish();
}
AttractionMainResponse :
#JsonIgnoreProperties (ignoreUnknown = true)
public class AttractionMainResponse {
private AttractionDetailModel Attraction_Info;
private String response;
public AttractionMainResponse() {
Attraction_Info = null;
response =null;
}
public AttractionMainResponse(AttractionDetailModel aa,String ab) {
Attraction_Info = aa;
response = ab;
}
public AttractionDetailModel getAttraction_Info() {
return Attraction_Info;
}
public void setAttraction_Info(AttractionDetailModel attraction_Info) {
Attraction_Info = attraction_Info;
}
public String getResponse() {
return response;
}
public void setResponse(String response) {
this.response = response;
}
}
AttractionDetailModel :
#JsonIgnoreProperties (ignoreUnknown = true)
public class AttractionDetailModel {
private AddressDataAttraction address_data;
private List<Image> Images;
private TypesInAttraction Type;
private String architect;
private String architectural_style;
private int city_id;
private String founder;
private String description;
private int id;
private String name;
private String height;
private String opened_since;
private String popularity;
private String timings;
private String visitors;
private String profile_image_url;
public AttractionDetailModel() {
address_data = null;
architect = null;
architectural_style = null;
city_id=-1;
founder = null;
description = null;
id=-1;
name=null;
height=null;
opened_since=null;
popularity = null;
timings=null;
visitors=null;
Images = null;
Type=null;
profile_image_url=null;
}
public AttractionDetailModel(AddressDataAttraction address_data, List<Image> images, TypesInAttraction type, String architect, String architectural_style, int city_id, String founder, String description, int id, String name, String height, String opened_since, String popularity, String timings, String visitors, String profile_image_url) {
this.address_data = address_data;
Images = images;
Type = type;
this.architect = architect;
this.architectural_style = architectural_style;
this.city_id = city_id;
this.founder = founder;
this.description = description;
this.id = id;
this.name = name;
this.height = height;
this.opened_since = opened_since;
this.popularity = popularity;
this.timings = timings;
this.visitors = visitors;
this.profile_image_url = profile_image_url;
}
public String getProfile_image_url() {
return profile_image_url;
}
public void setProfile_image_url(String profile_image_url) {
this.profile_image_url = profile_image_url;
}
public AddressDataAttraction getAddress_data() {
return address_data;
}
public void setAddress_data(AddressDataAttraction address_data) {
this.address_data = address_data;
}
public List<Image> getImages() {
return Images;
}
public void setImages(List<Image> images) {
Images = images;
}
public TypesInAttraction getType() {
return Type;
}
public void setType(TypesInAttraction type) {
Type = type;
}
public String getArchitect() {
return architect;
}
public void setArchitect(String architect) {
this.architect = architect;
}
public String getArchitectural_style() {
return architectural_style;
}
public void setArchitectural_style(String architectural_style) {
this.architectural_style = architectural_style;
}
public int getCity_id() {
return city_id;
}
public void setCity_id(int city_id) {
this.city_id = city_id;
}
public String getFounder() {
return founder;
}
public void setFounder(String founder) {
this.founder = founder;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
public String getOpened_since() {
return opened_since;
}
public void setOpened_since(String opened_since) {
this.opened_since = opened_since;
}
public String getPopularity() {
return popularity;
}
public void setPopularity(String popularity) {
this.popularity = popularity;
}
public String getTimings() {
return timings;
}
public void setTimings(String timings) {
this.timings = timings;
}
public String getVisitors() {
return visitors;
}
public void setVisitors(String visitors) {
this.visitors = visitors;
}
}
AddressDataAttractions :
#JsonIgnoreProperties (ignoreUnknown = true)
public class AddressDataAttraction {
private String address;
private String city;
private String country;
private String landmark;
private float latitude;
private float longitude;
private String pincode;
private String state;
public AddressDataAttraction() {
address=null;
city=null;
country=null;
landmark=null;
latitude=-1;
longitude=-1;
pincode=null;
state=null;
}
public AddressDataAttraction(String address, String city, String country, String landmark, float latitude, float longitude, String pincode, String state) {
this.address = address;
this.city = city;
this.country = country;
this.landmark = landmark;
this.latitude = latitude;
this.longitude = longitude;
this.pincode = pincode;
this.state = state;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getLandmark() {
return landmark;
}
public void setLandmark(String landmark) {
this.landmark = landmark;
}
public float getLatitude() {
return latitude;
}
public void setLatitude(float latitude) {
this.latitude = latitude;
}
public float getLongitude() {
return longitude;
}
public void setLongitude(float longitude) {
this.longitude = longitude;
}
public String getPincode() {
return pincode;
}
public void setPincode(String pincode) {
this.pincode = pincode;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
TypeInAttraction :
#JsonIgnoreProperties (ignoreUnknown = true)
public class TypesInAttraction{
private String type;
private int id ;
public TypesInAttraction() {
type=null;
id=-1;
}
public TypesInAttraction(String type, int id) {
this.type = type;
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
In debug mode, string response in objectMapper shows correct response, string response in attractionMainResponse giving a success but can't map the attractionDetailModel, giving null.
Is this about a Jackson ObjectMapper? Is it possible to create a smaller example, that makes it easier to give a solution.

Java Object Serialization to JSON using Jackson

I have the following POJO classes
#JsonIgnoreProperties(ignoreUnknown = true)
public class GroupUser {
#JsonProperty("userId")
int userId;
#JsonProperty("status")
int status;
#JsonProperty("admin")
int isAdmin;
#JsonProperty("email")
String email;
#JsonProperty("creator")
int Creator;
#JsonProperty("new")
int isNew;
// generated and cached
#JsonProperty("user_name")
String userName;
public GroupUser() {
}
#JsonIgnore
public GroupUser(String email, int isCreator) {
this.userId = 0;
this.email = email;
this.Creator = isCreator;
this.isAdmin = isCreator;
if (isCreator == 1) {
this.status = Group.STATE_ACCEPTED;
this.isNew = 0;
} else {
this.isNew = 1;
this.status = Group.STATE_INVITED;
}
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public int getIsAdmin() {
return isAdmin;
}
public void setIsAdmin(int isAdmin) {
this.isAdmin = isAdmin;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getCreator() {
return Creator;
}
public void setCreator(int creator) {
Creator = creator;
}
public int getIsNew() {
return isNew;
}
public void setIsNew(int isNew) {
this.isNew = isNew;
}
}
And
#JsonIgnoreProperties(ignoreUnknown = true)
public class Group {
#JsonIgnore
final public static int STATE_INVITED = 1;
#JsonIgnore
final public static int STATE_REJECTED = 2;
#JsonIgnore
final public static int STATE_ACCEPTED = 3;
#JsonIgnore
final public static int STATE_PENDING = 4;
#JsonProperty("location")
String location;
#JsonProperty("radius")
int radius;
#JsonProperty("adminApprovalForObservers")
int isAdminApprovalRequired;
#JsonProperty("title")
String Title;
#JsonProperty("groupUsers")
GroupUser[] Users;
#JsonProperty("newVotingOnlyByAdmin")
int onlyAdminCreatesVote;
#JsonProperty("new")
int isNew;
#JsonProperty("requiredVotes")
int requiredVotes;
#JsonProperty("type")
int type;
#JsonProperty("allowObservers")
int allowObservers;
#JsonProperty("thumb")
String imageUrl;
#JsonProperty("timestamp")
long timeStamp;
#JsonProperty("openForAnyone")
int isOpenForAnyone;
#JsonProperty("uniqueId")
String uiqueId;
#JsonProperty("newDecisionOnlyByAdmin")
int newDecisionOnlyByAdmin;
#JsonProperty("requirePresence")
int requirePresence;
#JsonProperty("groupId")
int groupId;
#JsonProperty("automaticExclusions")
int autoExclusion;
#JsonProperty("adminApprovalForMembership")
int adminApprovalForMembership;
#JsonProperty("description")
String description;
// generated and cached
#JsonProperty("creator_name")
String creatorName;
public Group() {
}
#JsonIgnore
public Group(int id) {
this.groupId = id;
}
#JsonIgnore
public Group(String name, String description, String imagePath) {
this.Title = name;
this.description = description;
this.groupId = 0;
this.location = "";
this.radius = 0;
this.imageUrl = imagePath;
this.isNew = 1;
this.Users = new GroupUser[] {};
this.isOpenForAnyone = 1;
this.onlyAdminCreatesVote = 0;
this.adminApprovalForMembership = 0;
this.allowObservers = 1;
this.timeStamp = Calendar.getInstance().getTimeInMillis() / 1000;
}
#JsonIgnore
public String getCreatorsEmail() {
for (GroupUser u : Users) {
if (u.getCreator() == 1) {
return u.getEmail();
}
}
return null;
}
#JsonIgnore
public int getCreatorsId() {
for (GroupUser u : Users) {
if (u.getCreator() == 1) {
return u.getUserId();
}
}
return -1;
}
#JsonIgnore
public GroupUser getUser(int userId) {
if (Users != null) {
for (GroupUser gu : Users) {
if (gu.getUserId() == userId) {
return gu;
}
}
}
return null;
}
public String getCreatorName() {
return creatorName;
}
public void setCreatorName(String creatorName) {
this.creatorName = creatorName;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public int getRadius() {
return radius;
}
public void setRadius(int radius) {
this.radius = radius;
}
public int getIsAdminApprovalRequired() {
return isAdminApprovalRequired;
}
public void setIsAdminApprovalRequired(int isAdminApprovalRequired) {
this.isAdminApprovalRequired = isAdminApprovalRequired;
}
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
#JsonProperty("groupUsers")
public GroupUser[] getUsers() {
return Users;
}
#JsonProperty("groupUsers")
public void setUsers(GroupUser[] users) {
Users = users;
}
public int getOnlyAdminCreatesVote() {
return onlyAdminCreatesVote;
}
public void setOnlyAdminCreatesVote(int onlyAdminCreatesVote) {
this.onlyAdminCreatesVote = onlyAdminCreatesVote;
}
public int getIsNew() {
return isNew;
}
public void setIsNew(int isNew) {
this.isNew = isNew;
}
public int getRequiredVotes() {
return requiredVotes;
}
public void setRequiredVotes(int requiredVotes) {
this.requiredVotes = requiredVotes;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getAllowObservers() {
return allowObservers;
}
public void setAllowObservers(int allowObservers) {
this.allowObservers = allowObservers;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public long getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(long timeStamp) {
this.timeStamp = timeStamp;
}
public int getIsOpenForAnyone() {
return isOpenForAnyone;
}
public void setIsOpenForAnyone(int isOpenForAnyone) {
this.isOpenForAnyone = isOpenForAnyone;
}
public String getUiqueId() {
return uiqueId;
}
public void setUiqueId(String uiqueId) {
this.uiqueId = uiqueId;
}
public int getNewDecisionOnlyByAdmin() {
return newDecisionOnlyByAdmin;
}
public void setNewDecisionOnlyByAdmin(int newDecisionOnlyByAdmin) {
this.newDecisionOnlyByAdmin = newDecisionOnlyByAdmin;
}
public int getRequirePresence() {
return requirePresence;
}
public void setRequirePresence(int requirePresence) {
this.requirePresence = requirePresence;
}
public int getGroupId() {
return groupId;
}
public void setGroupId(int groupId) {
this.groupId = groupId;
}
public int getAutoExclusion() {
return autoExclusion;
}
public void setAutoExclusion(int autoExclusion) {
this.autoExclusion = autoExclusion;
}
public int getAdminApprovalForMembership() {
return adminApprovalForMembership;
}
public void setAdminApprovalForMembership(int adminApprovalForMembership) {
this.adminApprovalForMembership = adminApprovalForMembership;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
I am using jackson library to serialize the Group Object to JSON like below:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, true);
return mapper.writeValueAsString(group);
But the Users fields never gets serialized, no matter what groupUsers always is an empty array []. Any idea what am I doing wrong?

JSON to Java Mapping Help - Nested Collection

I'm trying to figure out a way to transform this JSON String into a Java object graph but I'm unable to do so. Below, I've inserted my JSON String, and my two classes. I've verified that its a valid json structure. I've been trying googles api (http://sites.google.com/site/gson/gson-user-guide) but it doesn't map the nested Photo Collection. Any ideas or alternate libraries?
{"photos":{"page":1,"pages":73514,"perpage":50,"total":"3675674","photo":[{"id":"5516612975","owner":"23723942#N07","secret":"b8fb1fda57","server":"5213","farm":6,"title":"P3100006.JPG","ispublic":1,"isfriend":0,"isfamily":0},{"id":"5516449299","owner":"81031835#N00","secret":"67b56722da","server":"5171","farm":6,"title":"Kaiser Boys Volleyball","ispublic":1,"isfriend":0,"isfamily":0}]},"stat":"ok"}
Photos.java
public class Photos {
private int pages;
private int perpage;
private String total;
private List<Photo> photo;
private String stat;
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public int getPerpage() {
return perpage;
}
public void setPerpage(int perpage) {
this.perpage = perpage;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public List<Photo> getPhoto() {
return photo;
}
public void setPhoto(List<Photo> photo) {
this.photo = photo;
}
public String getStat() {
return stat;
}
public void setStat(String stat) {
this.stat = stat;
}
}
Photo.java:
public class Photo {
private String id;
private String owner;
private String secret;
private String server;
private String farm;
private String title;
private int isPublic;
private int isFriend;
private int isFamily;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public String getServer() {
return server;
}
public void setServer(String server) {
this.server = server;
}
public String getFarm() {
return farm;
}
public void setFarm(String farm) {
this.farm = farm;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getIsPublic() {
return isPublic;
}
public void setIsPublic(int isPublic) {
this.isPublic = isPublic;
}
public int getIsFriend() {
return isFriend;
}
public void setIsFriend(int isFriend) {
this.isFriend = isFriend;
}
public int getIsFamily() {
return isFamily;
}
public void setIsFamily(int isFamily) {
this.isFamily = isFamily;
}
}
Use Jackson. It'll take care of converting to and from JSON. It provides multiple ways of approaching conversion, and is well-integrated with frameworks like Spring. Definitely one to know.

Categories

Resources