如何根据android中的products_id过滤JsonData

时间:2016-09-27 18:15:03

标签: android android-recyclerview

成功从Web服务获取Json对象。有8个对象因此,Recycler视图将数据显示8次。但我只想要2次。删除重复的产品ID数据。

这是JSON对象。

  [ {"products_id":1,"products_regular_price":50.0},
  {"products_id":1,"products_regular_price":150.0},
  {"products_id":1,"products_regular_price":250.0},
  {"products_id":2,"products_regular_price":350.0},
  {"products_id":2,"products_regular_price":1000.0},
  {"products_id":2,"products_regular_price":1150.0},
  {"products_id":2,"products_regular_price":2150.0}]

我使用Retrofit获取Data和Recycler View以显示JSON Object。我在Recycler视图中获得了所有对象。      但我希望spinner中的所有products_regular_price与products_id 1相关。

像:         1,150,50,250,350,等等。

我想删除删除重复的product_id,但我想要所有products_regular_price。

       UPDATED SECTION

  // This is Pojo class
public final class Listitem {

@SerializedName("products_id")
@Expose
private String products_id;
@SerializedName("products_regular_price")
@Expose
private String products_regular_price;
  }

 //  Main Activity For  json response




 private List<Listitem> dataArrayList;
     @Override
    public void onResponse(Response<List<Listitem>> response, Retrofit retrofit) {

        dataArrayList = response.body();
        adapter = new ListItemAdapter(getApplicationContext(),dataArrayList);
        recyclerView.setAdapter(adapter);



       // Recycler view

     holder.id.setText(itemList.get(position).getProducts_id());
            holder.price.setText(itemList.get(position).getProducts_regular_price());

2 个答案:

答案 0 :(得分:1)

您可以使用HashMap,这对您的问题很有帮助,

  void storePrices(JSONArray YOUR_JSON_ARRAY)
  {

   HashMap<Integer, ArrayList<Integer>> hashmap = new HashMap<Integer, ArrayList<Integer>>();

   for (int i = 0; i < YOUR_JSON_ARRAY.length(); i++) {

    int prod_id = YOUR_JSON_ARRAY.getJSONObject(i).getInt("products_id");
    int price = YOUR_JSON_ARRAY.getJSONObject(i).getInt("products_regular_price");

    if(!hashmap.containsKey(prod_id)){  
        ArrayList<Integer> newList=new ArrayList();
        newList.add(price);
        hashmap.put(prod_id,newList);}
    else{
        ArrayList<Integer> oldList=hashmap.get(prod_id);
        oldList.add(price);
        hashmap.put(prod_id,oldList);
        }
     }
   }

对于您的示例问题, 执行上面的代码后,你会得到像,

这样的
 {1,{50,150,250}}
 {2,{350,1000,1150,2150}}

您可以通过

来检索值
   ArrayList<Integer> prices_1=hashmap.get(1);//prices for product 1
   it will be like
   {50,150,250}

   ArrayList<Integer> prices_2=hashmap.get(2);//prices for product 2
   it will be like
   {350,1000,1150,2150}

您可以将此值用于您的微调器。

更新问题的解决方案,

使用响应URL初始化RetrofitAPI接口。

    public interface RetrofitArrayAPI {
      @GET("api/your_response_url")
      Call<List<ListItem>> getListItems();
    }

参考本教程,

http://www.androidtutorialpoint.com/networking/retrofit-android-tutorial/

在您的活动中,

   dataArrayList = response.body()
   adapter = new  ListItemAdapter(getApplicationContext(),dataArrayList);
   recyclerView.setAdapter(adapter);

在Recycler View Adapter中,

  ListItem item = itemList.get(position);
  holder.id.setText(item.getProducts_id());
  holder.price.setText(item.getProducts_regular_price());

希望它会对你有所帮助。

答案 1 :(得分:0)

 Call<List<Listitem>> call = request.getJSON();
    call.enqueue(new Callback<List<Listitem>>() {

        @Override
        public void onResponse(Response<List<Listitem>> response, Retrofit retrofit) {

            dataArrayList = response.body();

            HashMap<String, ArrayList<String>> hashmap = new HashMap<>();
            for (int i = 0; i < dataArrayList.size(); i++) {

                String prod_id = dataArrayList.get(i).getProducts_id();
                String price = dataArrayList.get(i).getProducts_regular_price();

                if(!hashmap.containsKey(prod_id)){
                    ArrayList<String> newList=new ArrayList();
                    newList.add(price);
                    hashmap.put(prod_id,newList);}
                else{
                    ArrayList<String> oldList=hashmap.get(prod_id);
                    oldList.add(price);
                    hashmap.put(prod_id,oldList);
                }

            }

            adapter = new  ListItemAdapter(getApplicationContext(), dataArrayList);
            recyclerView.setAdapter(adapter);

        }



   //This is Recycler Adapter Class



 private List<Listitem> itemList;
private Context context;
private ArrayAdapter<String> spinnerArrayAdapter;

//For Spinner

private String[] items;





public ListItemAdapter(Context context, List itemList) {
    this.context = context;
    this.itemList = itemList;
     items = new String[itemList.size()];


}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem, parent, false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {


    holder.id.setText(itemList.get(position).getProducts_id());
    holder.id.setText(itemList.get(position).getProducts_regular_price());


           //FOR SPINNER
      items[position] = itemList.get(position).getProducts_regular_price();

        Log.v("Price", items[position] + "");


        spinnerArrayAdapter = new ArrayAdapter<String>(context, R.layout.spinner,R.id.txt_price, items);

      //  spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner);
        holder.spinner.setAdapter(spinnerArrayAdapter);