成功从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());
答案 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);