[英]How to parse json data from json array to recyclerview java android?
[英]How to show JSON objects included in JSON Array in Android Recyclerview
我有以下 JSON 数据,即一个数组中有 10 个对象。 我在 recyclerview 中获取对象,没有任何错误。
现在我需要做两件事:
我已经在适配器的 onBind 中评论了该行。
请帮我解决这两个问题。 提前谢谢了。
JSON 数据
{
"meta":{
"code":200,
"message":"success",
"total_pages":247,
"current_page":1,
"total_items":2469,
"total_quotes":5
},
"data":[
{
"id":"4968",
"topic":"Topic",
"sub_topic":"Sub Topic",
"city":"Pune",
"name":"Shashikant ",
"quotes":"0",
"credits":"10",
"timestamp":"2021-01-05 21:53:38"
},
{
"id":"4963",
"topic":"Topic",
"sub_topic":"Sub Topic",
"city":"Bangalore",
"name":"Amani",
"quotes":"0",
"credits":"10",
"timestamp":"2021-01-05 20:46:03"
},
{
"id":"4962",
"topic":"Topic",
"sub_topic":"Sub Topic",
"city":"Delhi",
"name":"Mechanical Engineer",
"quotes":"0",
"credits":"10",
"timestamp":"2021-01-05 20:23:00"
},
{
"id":"4961",
"topic":"Topic",
"sub_topic":"Sub Topic",
"city":"Mumbai",
"name":"Ankush patil",
"quotes":"0",
"credits":"10",
"timestamp":"2021-01-05 20:20:20"
},
{
"id":"4960",
"topic":"Topic",
"sub_topic":"Sub Topic",
"city":"Delhi",
"name":"ER Vikash Thakur",
"quotes":"0",
"credits":"10",
"timestamp":"2021-01-05 20:17:32"
},
{
"id":"4957",
"topic":"Topic",
"sub_topic":"Sub Topic",
"city":"Kolkata",
"name":"Shiladitya Ghosh",
"quotes":"0",
"credits":"10",
"timestamp":"2021-01-05 20:09:44"
},
{
"id":"4956",
"topic":"Topic",
"sub_topic":"Sub Topic",
"city":"Delhi",
"name":"Vikash",
"quotes":"0",
"credits":"10",
"timestamp":"2021-01-05 20:08:44"
},
{
"id":"4953",
"topic":"Topic",
"sub_topic":"Sub Topic",
"city":"Rishikesh",
"name":"Rahul",
"quotes":"0",
"credits":"10",
"timestamp":"2021-01-05 19:51:17"
},
{
"id":"4950",
"topic":"Topic",
"sub_topic":"Sub Topic",
"city":"Pune",
"name":"Abhishek",
"quotes":"0",
"credits":"10",
"timestamp":"2021-01-05 19:43:27"
},
{
"id":"4949",
"topic":"Topic",
"sub_topic":"Sub Topic",
"city":"Chandigarh ",
"name":"K Singh ",
"quotes":"0",
"credits":"10",
"timestamp":"2021-01-05 19:40:36"
}
]
}
我的片段:
public class LeadsFragment extends Fragment {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
private static final String url = "myurl";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_leads, container, false);
recyclerView = view.findViewById(R.id.recyclerview);
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
LeadModel leadsModelList = gson.fromJson(response, LeadModel.class);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
LeadsAdapter leadsAdapter = new LeadsAdapter(getContext(), leadsModelList, recyclerView);
recyclerView.setAdapter(leadsAdapter);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getContext(), error.toString(), Toast.LENGTH_SHORT).show();
}
});
RequestQueue queue = Volley.newRequestQueue(getContext());
queue.add(stringRequest);
return view;
}
}
我的适配器:
public class LeadsAdapter extends RecyclerView.Adapter<LeadsAdapter.ViewHolder> {
Context context;
LeadModel leadsModelList;
RecyclerView recyclerView;
final View.OnClickListener onClickListener = new MyOnClickListener();
public LeadsAdapter(Context context, LeadModel leadsModelList, RecyclerView recyclerView) {
this.context = context;
this.leadsModelList = leadsModelList;
this.recyclerView = recyclerView;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView name, topic, sub_topic, city, credits, quotes;
public ViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.tvName);
topic = itemView.findViewById(R.id.tvTopic);
sub_topic = itemView.findViewById(R.id.tvSubTopic);
city = itemView.findViewById(R.id.tvLocation);
credits = itemView.findViewById(R.id.tvCredits);
quotes = itemView.findViewById(R.id.tvQuotes);
}
}
@NonNull
@Override
public LeadsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.lead_card, viewGroup, false);
view.setOnClickListener(onClickListener);
LeadsAdapter.ViewHolder viewHolder = new LeadsAdapter.ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull LeadsAdapter.ViewHolder viewHolder, int position) {
viewHolder.name.setText(leadsModelList.getData().get(position).getName());
viewHolder.topic.setText(leadsModelList.getData().get(position).getTopic());
viewHolder.sub_topic.setText(leadsModelList.getData().get(position).getSubTopic());
viewHolder.city.setText(leadsModelList.getData().get(position).getCity());
viewHolder.credits.setText(leadsModelList.getData().get(position).getCredits()+ " Credits");
// viewHolder.quotes.setText(leadsModelList.getData().get(position).getQuotes()+"/"+ leadsModelList.getMeta().getTotalQuotes() +" Quotes");
}
@Override
public int getItemCount() {
return leadsModelList.getData().size();
}
}
}
}
Model Class:
public class LeadModel {
@SerializedName("leadsMeta")
@Expose
private LeadsMeta leadsMeta;
@SerializedName("data")
@Expose
private List<LeadsData> data = null;
public LeadsMeta getMeta() {
return leadsMeta;
}
public void setMeta(LeadsMeta leadsMeta) {
this.leadsMeta = leadsMeta;
}
public List<LeadsData> getData() {
return data;
}
public void setData(List<LeadsData> data) {
this.data = data;
}
}
元 Class
public class LeadsMeta {
@SerializedName("code")
@Expose
private Integer code;
@SerializedName("message")
@Expose
private String message;
@SerializedName("total_pages")
@Expose
private Integer totalPages;
@SerializedName("current_page")
@Expose
private Integer currentPage;
@SerializedName("total_items")
@Expose
private Integer totalItems;
@SerializedName("total_quotes")
@Expose
private Integer totalQuotes;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getTotalPages() {
return totalPages;
}
public void setTotalPages(Integer totalPages) {
this.totalPages = totalPages;
}
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getTotalItems() {
return totalItems;
}
public void setTotalItems(Integer totalItems) {
this.totalItems = totalItems;
}
public Integer getTotalQuotes() {
return totalQuotes;
}
public void setTotalQuotes(Integer totalQuotes) {
this.totalQuotes = totalQuotes;
}
}
数据 Class
public class LeadsData {
@SerializedName("id")
@Expose
private String id;
@SerializedName("topic")
@Expose
private String topic;
@SerializedName("sub_topic")
@Expose
private String subTopic;
@SerializedName("city")
@Expose
private String city;
@SerializedName("name")
@Expose
private String name;
@SerializedName("quotes")
@Expose
private String quotes;
@SerializedName("credits")
@Expose
private String credits;
@SerializedName("timestamp")
@Expose
private String timestamp;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTopic() {
return topic;
}
public void setTopic(String topic) {
this.topic = topic;
}
public String getSubTopic() {
return subTopic;
}
public void setSubTopic(String subTopic) {
this.subTopic = subTopic;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getQuotes() {
return quotes;
}
public void setQuotes(String quotes) {
this.quotes = quotes;
}
public String getCredits() {
return credits;
}
public void setCredits(String credits) {
this.credits = credits;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
}
“元” object 的序列化名称在您的 LeadModel class 中应为“元”。
public class LeadModel {
//@SerializedName("leadsMeta")
@SerializedName("meta")
@Expose
private LeadsMeta leadsMeta;}
请在您的 recyclerview 上使用recyclerView.addOnScrollListener
。 当用户滚动并到达最后一项时,您需要加载更多 10 项和 append 列表到现有列表
public class LeadsFragment extends Fragment {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
private static final String url = "myurl";
boolean isLoading = false; // For Tracking
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
......
........
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
if (!isLoading) {
if (linearLayoutManager != null && linearLayoutManager.findLastCompletelyVisibleItemPosition() == yourList.size() - 1) {
// Last item reached
loadMore(); // Note this method
isLoading = true;
}
}
}
});
private void loadMore() {
// Make http Request
// append the new data to LeadsData
// notifyAdapter items changed
// set isLoading = false
}
这是因为您在 LeadModel 中的序列化名称应该与您的 json 一致
@SerializedName("meta")
对于您的第一个问题:
您需要检查此代码。 在 MainActivity.java class 中有一个方法 loadMore()。 在您的情况下,您需要执行 API 调用以加载另外 10 个项目,然后通知您的适配器您有新项目,它将将它们加载到您的列表中。 这就是你如何用无穷无尽的项目来实现你的recyclerview。
对于第二个问题:
您应该在@SerializedName 中将leadsMeta更改为meta 。 这是您编辑的 class:
public class LeadModel {
@SerializedName("meta")
@Expose
private LeadsMeta leadsMeta;
@SerializedName("data")
@Expose
private List<LeadsData> data = null;
public LeadsMeta getMeta() {
return leadsMeta;
}
public void setMeta(LeadsMeta leadsMeta) {
this.leadsMeta = leadsMeta;
}
public List<LeadsData> getData() {
return data;
}
public void setData(List<LeadsData> data) {
this.data = data;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.