In order to show a chart I have an asyncTask that read a large list of products, get their types and add them to different sublists. This is my code:
   List<List<Bundle>> productsByType;
   ...
   private class LoadDataForChart extends AsyncTask<Void, Float, Boolean> {
    @Override
    protected void onPreExecute() {
    }
    @Override
    protected Boolean doInBackground(Void... params) {
        productsByType = new ArrayList<>();
        productsByType.add(new ArrayList<Bundle>()); 
        productsByType.add(new ArrayList<Bundle>()); 
        productsByType.add(new ArrayList<Bundle>()); 
        productsByType.add(new ArrayList<Bundle>()); 
        productsByType.add(new ArrayList<Bundle>()); 
        List<Bundle> allProducts = dataManager.getAllProducts();
        for(int i = 0; i < allProducts.size(); i++)
        {
            Bundle product = allProducts.get(i);
            List<Bundle> productsByTypeSublist = null;
            String productType = product.getString("type");
            if(productType.equals("1"))
                productsByTypeSublist = productsByType.get(0);
            else if(productType.equals("2"))
                productsByTypeSublist = productsByType.get(1);
            else if(productType.equals("3"))
                productsByTypeSublist = productsByType.get(2);
            else if(productType.equals("4"))
                productsByTypeSublist = productsByType.get(3);
            else if(productType.equals("5"))
                productsByTypeSublist = productsByType.get(4);
            if(productsByTypeSublist != null)
                productsByTypeSublist.add(product);
        }
        return true;
    }
    @Override
    protected void onProgressUpdate(Float... values) {
    }
    @Override
    protected void onPostExecute(Boolean result) {
        showChartData();
    }
    @Override
    protected void onCancelled() {
    }
}
This is the crash:
Caused by java.lang.ArrayIndexOutOfBoundsException: length=10; index=10
       at java.util.ArrayList.add(ArrayList.java:468)
       at com.mycompany.myapp.ui.fragments.ChartsFragment$LoadDataForChart.doInBackground(ChartsFragment.java:524)
       at com.mycompany.myapp.ui.fragments.ChartsFragment$LoadDataForChart.doInBackground(ChartsFragment.java:415)
       at android.os.AsyncTask$3.call(AsyncTask.java:378)
Line 524 is the productsByTypeSublist.add line. Some crashes are with "length=10; index=10", some are with "length=33; index=33", etc... I guess it depends on what allProducts have (?).
What I don't understand is Why am I getting ArrayIndexOutOfBoundsException in a List.add method?? specially when I have no limit to that arrayList and I'm adding the item without and index, just ant the end of the list?
I've thought maybe it's a thread problem, even if it's a problem with Crashlytics logs and the problem is really in other point of my code.
The code seems pretty simple to me, what am I missing?