数组问题:ArrayIndexOutOfBoundsException

时间:2014-09-03 19:48:41

标签: android arrays listview sharedpreferences counter

我试图在resultsArray中存储作为输入的变量(字符串)。由于某种原因,它没有进展到填补下一个位置。只有结果数组中的第一个位置才有效。有任何想法吗?如果placecounter == 0,我每次都会存储字符串元素,然后在再次运行时调用(placeCounter> 0)并尝试再添加一个元素。

 if(placeCounterExplanation == 0){
                 CategoryDetailArray = new String[30];
                 CategoryDetailArray[0] = categoriesItem;

                 IndividualExpenseDetailArray = new String[30];
                 IndividualExpenseDetailArray[0] = individualamountitem;

                 ExplanationDetailArray = new String[30];
                 ExplanationDetailArray[0] = explanationItem;

                 DateofPurchaseArray = new String [30];
                 DateofPurchaseArray[0] = currentDateItem;
                // SharedPreferences sp = SharedPreferences.getDefaultSharedPreferences(this);
                //    SharedPreferences.Editor mEdit1 = sp.edit();
                 test.setText(ExplanationDetailArray[0]);
                 test2.setText(IndividualExpenseDetailArray[0]);
                // test3.setText(DateofPurchaseArray[0]);
                 test4.setText(CategoryDetailArray[0]);


                 //String placeCount = Integer.toString(placeCounterExplanation);

                //  test3.setText(placeCount);


                 //STORE
                    editor.putInt("Status_size", ExplanationDetailArray.length); /* sKey is an array */ 

                    for(int i=0;i<ExplanationDetailArray.length;i++)  
                    {
                        editor.remove("Explanation_" + i);
                        editor.remove("ExpenseAmount_" + i);
                        editor.remove("Category_" + i);
                        editor.remove("DOP_" + i);
                        editor.putString("Explanation_" + i, ExplanationDetailArray[i]);  
                        editor.putString("ExpenseAmount_" + i, IndividualExpenseDetailArray[i]);  
                        editor.putString("Category_" + i, CategoryDetailArray[i]);  
                        editor.putString("DOP_" + i, DateofPurchaseArray[i]);  
                    }

                     editor.commit();     
                }






             if(placeCounterExplanation > 0){

                 //SharedPreferences mSharedPreference1 = PreferenceManager.getDefaultSharedPreferences(this);


                 //RECEIVE
                   // ExplanationDetailArray.clear();
                    int size = pref.getInt("Status_size", 0);  






                    for(int i=0;i<size;i++) 
                    {
                       // ExplanationDetailArray.add(pref.getString("Explanation" + i, null));
                        ExplanationDetailArray[i] = pref.getString("Explanation_" + i, null);
                        IndividualExpenseDetailArray[i] = pref.getString("ExpenseAmount_" + i, null);
                        CategoryDetailArray[i] = pref.getString("Category_" + i, null);
                        DateofPurchaseArray[i] = pref.getString("DOP_" + i, null);
                    }

                    ExplanationDetailArray[placeCounterExplanation] = explanationItem;
                    IndividualExpenseDetailArray[placeCounterExplanation] = individualamountitem;
                    CategoryDetailArray[placeCounterExplanation] = categoriesItem;
                    DateofPurchaseArray[placeCounterExplanation] = currentDateItem;

                    Intent intent = getIntent();
                    // getting attached intent data
                    String product = intent.getStringExtra("product");
                    // displaying selected product name
                     txtProduct.setText(product);



                    String[] ResultsArray = new String[placeCounterExplanation];




                    if (product.equals("Alcohol")){
                        //test3.setText(product);

                        if(CategoryDetailArray[0].equals("Alcohol")){
                            ResultsArray[resultCounter] = (IndividualExpenseDetailArray[resultCounter] + "" + ExplanationDetailArray[resultCounter] + "" + DateofPurchaseArray[resultCounter] );
                        }

                        if(CategoryDetailArray[1].equals("Alcohol")){
                            ResultsArray[resultCounter + 1] = (IndividualExpenseDetailArray[resultCounter + 1] + "" + ExplanationDetailArray[resultCounter + 1] + "" + DateofPurchaseArray[resultCounter + 1] );
                        }

                        //  resultCounter = resultCounter + 1;
                    //}
                        test.setText(ResultsArray[0]);
                         test2.setText(ResultsArray[1]);

                        //editor.putInt("resultCounter",resultCounter);
                        // editor.commit();

                    //arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, ResultsArray);
                //  resultsListView.setAdapter(arrayAdapter);




            //building result array
                  /*    for(int i=0; i< placeCounterExplanation;i++){

                            if(CategoryDetailArray[i].equals("Alcohol")){

                                int resultCounter = pref.getInt("resultCounter",0);

                                    ResultsArray[resultCounter] = (IndividualExpenseDetailArray[resultCounter] + "" + ExplanationDetailArray[resultCounter] + "" + DateofPurchaseArray[resultCounter] );
                                    resultCounter = resultCounter + 1;

                                     editor.putInt("resultCounter",resultCounter);
                                     editor.commit();
                            }

                        }   
                    }

* /                         }

                    //String placeCount = Integer.toString(placeCounterExplanation);
                   // test.setText(ExplanationDetailArray[0]);
                     //test2.setText(ExplanationDetailArray[1]);
                        //test3.setText(placeCount);


                        //test.setText(ResultsArray[0]);
                        // test2.setText(IndividualExpenseDetailArray[0]);
                        // test3.setText(CategoryDetailArray[0]);
                        // test4.setText(DateofPurchaseArray[0]);





                    //STORE

                    editor.putInt("Status_size", ExplanationDetailArray.length); /* sKey is an array */ 

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

                        editor.remove("Explanation_" + i);
                        editor.remove("ExpenseAmount_" + i);
                        editor.remove("Category_" + i);
                        editor.remove("DOP_" + i);
                        editor.putString("Explanation_" + i, ExplanationDetailArray[i]);  
                        editor.putString("ExpenseAmount_" + i, IndividualExpenseDetailArray[i]);  
                        editor.putString("Category_" + i, CategoryDetailArray[i]);  
                        editor.putString("DOP_" + i, DateofPurchaseArray[i]);  



                    }

                     editor.commit();  






             }

             placeCounterExplanation = placeCounterExplanation + 1;
             editor.putInt("placeCounterExplanation",placeCounterExplanation);
             editor.commit();

1 个答案:

答案 0 :(得分:0)

您可以使用ArrayList,以便添加项目没有限制。

ArrayList<String> yourlistname = new ArrayList<String>();

如果要存储int值,只需将ArrayList<String>更改为ArrayList<Integer>即可。 甚至你可以使用类名而不是String或int

用于添加值

yourlistname.add("item1");

获取价值

String value = yourlistname.get(index).toString();

获取ArrayList的大小

int length = yourlistname.size();