Jose Antony Jose Antony - 2 months ago 8
JSON Question

how to add a json array response to a recycler adapter class from fragment

my response from the json is getting good but i cant add this to my model class

my fragment class

public class Premiums extends Fragment {
private RecyclerView recyclerPremium;
private RecyclerView.LayoutManager mLayoutManager;
private List<PremiumDetails> premiumDetailslist = new ArrayList<>();
private PremiumAdapter premiumAdapter;
private PremiumDetails premiumDetails;
private JSONObject jsonobject;
private Context context;

public Premiums() {
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View mainView = inflater.inflate(R.layout.premium_fragment, container, false);
recyclerPremium = (RecyclerView) mainView.findViewById(R.id.recycler_premium);
mLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
recyclerPremium.setLayoutManager(mLayoutManager);
recyclerPremium.setHasFixedSize(true);
context = getContext();
// premiumAdd();
data();
premiumAdapter = new PremiumAdapter(context, premiumDetailslist);
recyclerPremium.setAdapter(premiumAdapter);
return mainView;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}

private void premiumAdd() {
PremiumRequestHandler premiumHandler = new PremiumRequestHandler("premiumADD");
premiumHandler.executeAsStringRequest(new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("response", response);

JSONArray jsonarray = null;
try {
jsonarray = new JSONArray(response);

} catch (JSONException e) {
e.printStackTrace();
}
for (int i = 0; i < jsonarray.length(); i++) {
try {
jsonobject = jsonarray.getJSONObject(i);
// Log.e("id", String.valueOf(jsonobject.getInt("id")));
premiumDetails = new PremiumDetails(jsonobject.getInt("id"),
jsonobject.getInt("userid"),
jsonobject.getInt("mobile"),
jsonobject.getInt("cityid"),
jsonobject.getInt("price"),
jsonobject.getInt("comments"),
jsonobject.getInt("created"),
jsonobject.getInt("categoryid"),
jsonobject.getInt("MainCategoryID"),
jsonobject.getInt("views"),
jsonobject.getInt("ImageCount"),
jsonobject.getInt("storeid"),
jsonobject.getString("title"),
jsonobject.getString("default_photo"),
jsonobject.getString("CityName"),
jsonobject.getString("CategoryName"),
jsonobject.getString("currency"),
jsonobject.getString("description"));
premiumDetailslist.add(premiumDetails)
} catch (JSONException e) {
e.printStackTrace();
}
}

premiumAdapter.setPremiumDetails(premiumDetailslist);

}
}, new BaseRequest.ErrorResponseCallback() {
@Override
public void onError(Exception exception) {

}
});


}

private void data() {
PremiumDetails featuredDetails = new PremiumDetails(1, 2, 98555555, 15, 156, 1456789, 2, 2, 45, 78, 24, 5,
"الدول العربية الواقعة في المشرق العربي في جنوب", "https://cdn.bezaat.com/th100x100_1471645516-71.jpeg", " احتلت أراضيه وذلك", "hell",
"gragyt", "الشمال البحر الأسود وجورجيا ومن الشرق أرمينيا وإيران ومن الجنوب العراق وسوريا والبحر المتوسط مع حدود بحرية مع قبرص، ومن الغرب بحر إيجة واليونان وبلغاريا. هي عضو في منظمة التعاون الاقتصادي للبحر الأسود. تركيا دولة علمانية ديمقراطية، وحدوية، جمهورية دستورية ذات تراث ثقافي قديم. أصبحت تركيا متكاملة على نحو متزايد مع الغرب من خلال عضويتها في منظمات مثل مجلس أوروبا وحلف شمال الأطلسي، وغيره. وقد عززت تركيا أيضًا علاقات ثقافية وثيق"
);
premiumDetailslist.add(featuredDetails);

featuredDetails = new PremiumDetails(2, 2, 98555555, 15, 156, 1456789, 2, 2, 45, 78, 24, 5,
"الدول العربية الواقعة في المشرق العربي في جنوب", "https://cdn.bezaat.com/th100x100_1471645516-71.jpeg", " احتلت أراضيه وذلك", "hell",
"gragyt", "الشمال البحر الأسود وجورجيا ومن الشرق أرمينيا وإيران ومن الجنوب العراق وسوريا والبحر المتوسط مع حدود بحرية مع قبرص، ومن الغرب بحر إيجة واليونان وبلغاريا. هي عضو في منظمة التعاون الاقتصادي للبحر الأسود. تركيا دولة علمانية ديمقراطية، وحدوية، جمهورية دستورية ذات تراث ثقافي قديم. أصبحت تركيا متكاملة على نحو متزايد مع الغرب من خلال عضويتها في منظمات مثل مجلس أوروبا وحلف شمال الأطلسي، وغيره. وقد عززت تركيا أيضًا علاقات ثقافية وثيق"
);
premiumDetailslist.add(featuredDetails);

featuredDetails = new PremiumDetails(3, 2, 98555555, 15, 156, 1456789, 2, 2, 45, 78, 24, 5,
"الدول العربية الواقعة في المشرق العربي في جنوب", "https://cdn.bezaat.com/th100x100_1471645516-71.jpeg", " احتلت أراضيه وذلك", "hell",
"gragyt", "الشمال البحر الأسود وجورجيا ومن الشرق أرمينيا وإيران ومن الجنوب العراق وسوريا والبحر المتوسط مع حدود بحرية مع قبرص، ومن الغرب بحر إيجة واليونان وبلغاريا. هي عضو في منظمة التعاون الاقتصادي للبحر الأسود. تركيا دولة علمانية ديمقراطية، وحدوية، جمهورية دستورية ذات تراث ثقافي قديم. أصبحت تركيا متكاملة على نحو متزايد مع الغرب من خلال عضويتها في منظمات مثل مجلس أوروبا وحلف شمال الأطلسي، وغيره. وقد عززت تركيا أيضًا علاقات ثقافية وثيق"
);
premiumDetailslist.add(featuredDetails);}}


my adapter class

public class PremiumAdapter extends RecyclerView.Adapter<PremiumAdapter.MyViewHolderPremium> {
private List<PremiumDetails> premiumDetailsList;
private ImageLoader imageLoader;
private Context context;

public PremiumAdapter(Context context, List<PremiumDetails> premiumDetailsList) {
this.premiumDetailsList = premiumDetailsList;
this.context = context;
notifyDataSetChanged();

}
public void setPremiumDetails(List<PremiumDetails> premiumDetailsList) {
this.premiumDetailsList = premiumDetailsList;
notifyDataSetChanged();
}


public class MyViewHolderPremium extends RecyclerView.ViewHolder {
private TextView txtTitle,txtDescription,txtCityName,txtPrice,txtCategory,txtHour,txtPhotoNo;
private NetworkImageView imgPhoto;
public MyViewHolderPremium(View itemView) {
super(itemView);
txtTitle = (TextView)itemView.findViewById(R.id.txt_title_fad);
txtDescription = (TextView)itemView.findViewById(R.id.description_fad);
txtCityName = (TextView)itemView.findViewById(R.id.city_name_fad);
txtPrice = (TextView)itemView.findViewById(R.id.price_fad);
txtCategory = (TextView)itemView.findViewById(R.id.category_fad);
txtHour = (TextView)itemView.findViewById(R.id.hours_fad);
txtPhotoNo = (TextView)itemView.findViewById(R.id.txt_photo_no_fad);
imgPhoto=(NetworkImageView)itemView.findViewById(R.id.img_photo_lod_fad);
}
}

@Override
public MyViewHolderPremium onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.featured_ad_adapter_layout,parent,false);
final MyViewHolderPremium myViewHolderPremium = new MyViewHolderPremium(itemView);
return myViewHolderPremium;
}

@Override
public void onBindViewHolder(MyViewHolderPremium holder, int position) {
PremiumDetails premiumDetails = premiumDetailsList.get(position);
holder.txtTitle.setText(premiumDetails.getTitle());
holder.txtDescription.setText(premiumDetails.getDescription());
holder.txtCityName.setText(premiumDetails.getCityName());
holder.txtPrice.setText(Integer.toString(premiumDetails.getPrice()));
holder.txtCategory.setText(premiumDetails.getCategoryName());
holder.txtHour.setText(Integer.toString(premiumDetails.getCreated()));
holder.txtPhotoNo.setText(Integer.toString(premiumDetails.getImageCount())+" photos " );
try {
imageLoader= VolleyHandler.getImageLoader();
} catch (Exception e) {
e.printStackTrace();
}
//imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
//imageLoader.get(featuredAddDetails.getDefault_photo(), ImageLoader.getImageListener(holder.imgPhoto, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert));


holder.imgPhoto.setImageUrl(premiumDetails.getDefault_photo(),imageLoader);
}
@Override
public int getItemCount() {
Log.e("size", String.valueOf(premiumDetailsList.size()));
return premiumDetailsList.size();
}}


but when i try to add through data method it is getting in my recycler otherwise it is getting getitemcount in adapter as zero
json response is getting ,plz help me

my Json Response

[{"id":15105820,"userid":2469720,"mobile":"01222303389","title":"\u0645\u0637\u0644\u0648\u0628 \u0634\u064a\u0641 \u0645\u0634\u0627\u0648\u064a \u0648 \u062c\u0632\u0627\u0631 ","default_photo":"","CityName":"\u0627\u0644\u0642\u0627\u0647\u0631\u0629","CategoryName":"\u0641\u0646\u062f\u0642\u0629 \u0648\u0645\u0637\u0627\u0639\u0645","cityid":37,"storeid":null,"price":0,"currency":"\u062c\u0646\u064a\u0647","comments":1,"created":"1473429996","categoryid":448,"MainCategoryID":80,"description":"\u0645\u0637\u0644\u0648\u0628 \u0644\u0644\u0639\u0645\u0644 \u0628\u0634\u0631\u0643\u0629 \u0645\u0627\u0644\u0643\u0647 \u0644\u0639\u062f\u0629 \u0645\u0637\u0627\u0639\u0645 \u0643\u0628\u0631\u064a\r\n- \u0634\u064a\u0641 \u0645\u0634\u0627\u0648\u064a \u0648 \u062c\u0632\u0627\u0631\u0647 \r\n\u0634\u0631\u0637 \u0623\u0633\u0627\u0633\u064a: \u064a\u0634\u062a\u0631\u0637\u00a0\u0627\u0644\u062e\u0628\u0631\u0629 \u0641\u064a \u0645\u062c\u0627\u0644 \u0627\u0644\u0645\u0637\u0627\u0639\u0645 \u0627\u0648 \u0627\u0644\u0641\u0646\u0627\u062f\u0642\r\n\u0627\u0644\u0631\u062c\u0627\u0621 \u0623\u0631\u0633\u0627\u0644 \u0627\u0644\u0633\u064a\u0631\u0629 \u0627\u0644\u062f\u0627\u062a\u064a\u0629 \u0639\u0644\u064a \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0627\u0644\u0643\u062a\u0631\u0648\u0646\u064a: fb.restaurant@outlook.com\r\n ","views":9292,"ImageCount":0},]

Answer

Your JSON contains some null responses. Get those null values removed. Before setting it to your PremiumDetails POJO give a check if object value is null or not if null then set any default value at your end while parsing. For example

 if(jsonobject.getString("title").equals(null)){
    // set any default value 
}else{
    // set the value from json response
}

Note: Make sure not to include any null record while parsing that will break the flow and excption will occur. Glad to help...

Comments