2013-12-16 4 views
0

Я пытаюсь удалить данные из базы данных sqlite, данные загружаются в пользовательский список-представление с помощью флажка. Когда пользователь установит флажок, а затем нажмите кнопку удаления, он должен удалить все те данные, которые были отмечены.Ошибка базы данных Android sqlite IndexOutOfBoundException

Все работает нормально, он удаляет все проверенные данные. Но проблема состоит, наконец, в двух последних данных. Когда последние 2 данные остаются, и если я выберу оба данных для удаления, то он дает ошибку.

Logcat ниже

12-16 12:55:51.049: E/AndroidRuntime(11489): FATAL EXCEPTION: main 
12-16 12:55:51.049: E/AndroidRuntime(11489): java.lang.IndexOutOfBoundsException:  Invalid index 1, size is 1 
12-16 12:55:51.049: E/AndroidRuntime(11489): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at java.util.ArrayList.get(ArrayList.java:304) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at iqualtech.skirr.Classes$1$1.onClick(Classes.java:98) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:169) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at android.os.Looper.loop(Looper.java:154) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at android.app.ActivityThread.main(ActivityThread.java:4624) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at java.lang.reflect.Method.invokeNative(Native Method) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at java.lang.reflect.Method.invoke(Method.java:511) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
12-16 12:55:51.049: E/AndroidRuntime(11489): at dalvik.system.NativeStart.main(Native Method) 

и моя функция удаления, как показано ниже

private void deleteMenuSpinner() { 
      AlertDialog.Builder alertDialog = new AlertDialog.Builder(
        Classes.this); 

      final Spinner spinnerDelete = new Spinner(Classes.this); 
      alertDialog.setView(spinnerDelete); 

      adapterSpinner = ArrayAdapter.createFromResource(Classes.this, 
        R.array.delete_menu, 
        android.R.layout.simple_spinner_item); 
      adapterSpinner 
        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinnerDelete.setAdapter(adapterSpinner); 

      alertDialog.setPositiveButton("Ok", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, 
           int which) { 
          Code.i = true; 
          int len = mListView.getCount(); 
          SparseBooleanArray checked = mListView 
            .getCheckedItemPositions(); 
          for (int i = 0; i < len; i++) 
           if (checked.get(i)) { 
            Code.i = false; 
            String[] delete = names2.get(i); 
            String idString = delete[0]; 
            long idLong = Long.valueOf(idString); 
            Log.d("Deleting...", idLong + ""); 
            dataManipulator.delete(idLong); 
            names2.remove(i); 
           } 
          if (Code.i == true) { 
           AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
             Classes.this); 
           alertDialogBuilder.setTitle("No Data"); 
           alertDialogBuilder 
             .setMessage(
               "No Data Available to Delete") 
             .setCancelable(false) 
             .setPositiveButton(
               "Ok", 
               new DialogInterface.OnClickListener() { 
                public void onClick(
                  DialogInterface dialog, 
                  int id) { 
                } 
               }); 
           AlertDialog alertDialog = alertDialogBuilder 
             .create(); 
           alertDialog.show(); 
          } else { 
           names2 = dataManipulator.selectAll(); 
           stg1 = new String[names2.size()]; 
           int x = 0; 
           String stg; 

           for (String[] name : names2) { 
            stg = "Class Name : " + name[1]; 
            stg1[x] = stg; 
            x++; 
           } 
           adapter = new ArrayAdapter<String>(
             Classes.this, 
             R.layout.custom_list_item_multiple_choice, 
             stg1); 
           mListView 
             .setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
           mListView 
             .setBackgroundResource(R.drawable.assignmentheader); 
           mListView 
             .setCacheColorHint(Color.TRANSPARENT); 
           mListView.setAdapter(adapter); 
           adapter.notifyDataSetChanged(); 
          } 
         } 
        }); 

      alertDialog.setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, 
           int which) { 
          dialog.cancel(); 
         } 
        }); 
      alertDialog.show(); 
     } 
    }); 

Он дает ошибку на строке ниже

String[] delete = names2.get(i); 

ответ

0
java.lang.IndexOutOfBoundsException:  Invalid index 1, size is 1 

Он Givin г ошибка на строке ниже

String[] delete = names2.get(i); 

names2 ArrayList имеет только один элемент (размер 1), но вы пытаетесь get() второй (индекс 1).

код не показывает, как вы создали свой names2 список, но в любом случае len ограничения для i индекса перекручивания происходит от mListView.getCount(), который, возможно, не является правильным.

+0

Так что же такое решение, я имею в виду, где мне нужно изменить. – InnocentKiller

Смежные вопросы