2013-12-16 112 views
0

我想从sq-lite数据库中删除数据,数据在自定义列表视图中加载与复选框。当用户选中某个复选框然后按删除按钮时,它应该删除所有被检查的数据。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 

它得到安宁给错误下面线G错误

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

names2 ArrayList中只有一个元素(大小为1),但你要get()第二个(索引1)。

代码不会告诉你如何设置你的names2列表但不管怎么说,len约束为i指数循环来自mListView.getCount()这可能是不正确的。

+0

那么什么是解决方案,我的意思是我需要改变。 – InnocentKiller