2016-05-20 14 views
-1
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
at com.ppl.adapter.FoodRecyclerViewAdapter.onBindViewHolder(FoodRecyclerViewAdapter.java:99) 
at com.ppl.adapter.FoodRecyclerViewAdapter.onBindViewHolder(FoodRecyclerViewAdapter.java:24) 

Was ist falsch? Plz Erklär mir das. Lebensmittel haben Daten. FoodCategory haben auch Daten.IndexOutOfBoundsException: in RecyclerViewAdapter

Im Nahrungsmittelobjekt;

private Integer id; 
private String foodName; 
// etc. 
private List<FoodSize> foodSizes = new ArrayList<FoodSize>(); 

In FoodSize Objekt;

private Integer price; 
// etc 

public Integer getPrice() { 
     return price; 
    } 

In FoodRecyclerViewAdapter;

List<Food> contents;  

public void onBindViewHolder(ItemViewHolder holder, int position); 
    if (contents.get(position).getFoodSizes().get(0).getPrice() != null) { 
         holder.foodPrice.setText(contents.get(position).getFoodSizes().get(0).getPrice().toString()); 
        } 

Hier;

[ 
{ 
     "id": 1, 
     "food_name": "Chicken", 
      "food_category": { }, 
      "food_sizes": [ 
       { 
       "id": 84, 
       "size": "Normal", 
       "food_id": 1, 
       "price": 1100, 
       } 
      ] 
    } 
] 
+3

Wahrscheinlich haben Sie nichts in 'Inhalt'. Sind Sie sicher, dass Sie Ihre 'JSON' erfolgreich analysiert haben? –

+0

überprüfen, ob Inhalt Array Wert oder nicht? – Amy

+0

Welche sind die Zeilen 99 und 24 und wo initialisierst du 'contents' oder' foodSizes'? Bitte fügen Sie weiteren Code hinzu. Und was meinst du mit "Hier" und dann postest du JSON? Zeigen Sie den Code, in dem Sie JSON analysieren. –

Antwort

0
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 

     FoodSize mfoodSize = (FoodSize)foodSizes.get(position); 

     holder.foodPrice.setText(mfoodSize.getPrice().toString()); 

} 
+1

was ist der Unterschied? – Amy

+0

Warum schenkst du es auf 'FoodSize', wenn deine Liste bereits vom Typ' FoodSize' ist? –

0

Ich denke, Ihr Problem in getCount() Methode ist:

Schreib wie unten:

@Override 
public int getItemCount() { 
    if (contents != null) return contents.size(); 
    return 0; 
} 
0

ich es bekam.

if (contents.get(position).getFoodSizes().size() > 0) { 
        holder.foodPrice.setText(contents.get(position).getFoodSizes().get(0).getPrice().toString()); 
       } else { 
        Log.i("Price 0", " 0"); 
       } 
Verwandte Themen