0

Этот метод заполняет данные из поставщика содержимого другого приложения в списке, моя проблема в onItemClick, Я считаю, что «длинный идентификатор» метода возвращает неверный идентификатор, иногда он каждый раз, когда я удаляю запись, каждый раз, когда я удаляю запись, каждый раз, когда я пытаюсь удалить или обновить строку, большую часть времени она выдает ошибку (CursorIndexOutOfBounds), но есть случаи, когда в ней будет обновляться или удаляться другой ряд.Список поставщиков содержимогоПроверьте неверный идентификатор при обновлении или удалении

private void populateList(){ 
     arNames = new ArrayList<String>(); 
     String name; 
     Cursor cursor = getContentResolver().query(PATH_URI, null, null, null, null); 
     cursor.moveToFirst(); 
     do{ 
      name = cursor.getString(cursor.getColumnIndex("FULL")); 
      arNames.add(name); 
     }while(cursor.moveToNext()); 
     cursor.close(); 
     final CustomAdapter customAdapter = new CustomAdapter(inflater, arNames); 
     listNames.setAdapter(customAdapter); 
     listNames.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
     listNames.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Cursor c = getContentResolver().query(PATH_URI, null, "_id=" + id, null, null); 
       c.moveToFirst(); 
       view.setBackgroundColor(Color.GRAY); 

       cNames[coupler] = c.getString(c.getColumnIndex("FULL")); 
       Toast.makeText(getApplicationContext(),cNames[coupler],Toast.LENGTH_LONG).show(); 
       if (cNames[0].equals(cNames[1]) && coupler == 1) { 
        showEditor(id); 
       } else if (coupler++ == 1) { 
        coupler = 0; 
        populateList(); 
        Toast.makeText(getApplication(), flameOn(cNames[0], cNames[1]), Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 
    } 

12-17 16:31:52.075 3852-3852/com.example.den.flamesclient E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.den.flamesclient, PID: 3852 
    android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
      at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426) 
      at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 
      at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 
      at android.database.CursorWrapper.getString(CursorWrapper.java:114) 
      at com.example.den.flamesclient.MainActivity$1.onItemClick(MainActivity.java:71) 
      at android.widget.AdapterView.performItemClick(AdapterView.java:299) 
      at android.widget.AbsListView.performItemClick(AbsListView.java:1113) 
      at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904) 
      at android.widget.AbsListView.onTouchUp(AbsListView.java:3650) 
      at android.widget.AbsListView.onTouchEvent(AbsListView.java:3429) 
      at android.view.View.dispatchTouchEvent(View.java:7706) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068) 
      at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515) 
      at android.app.Activity.dispatchTouchEvent(Activity.java:2458) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016) 
      at android.view.View.dispatchPointerEvent(View.java:7886) 
      at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3954) 
      at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3833) 
      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449) 
      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418) 
      at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525) 
      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426) 
      at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582) 
      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449) 
      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418) 
      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426) 
      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
      at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5602) 
      at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5582) 
      at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5553) 
      at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5682) 
      at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
      at android.os.MessageQueue.nativePollOnce(Native Method) 
      at android.os.MessageQueue.next(MessageQueue.java:138) 
      at android.os.Looper.loop(Looper.java:123) 
      at android.app.ActivityThread.main(ActivityThread.java:5017) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
      at dalvik.system.NativeStart.main(Native Method) 
+0

использование SimpleCursorAdaoter, не CustomAdapter – pskink

ответ

0

Я нашел причину, почему моя строка идентификатор давал неправильный идентификатор. Ну, я не стал бы называть это «неправильным», понимая, что это за ошибка.

Вы видите, когда курсор запрашивает данные и проектирует их в виде списка, они фактически не запрашивают данные, которые были удалены. Моя ошибка заключалась в том, что я забыл, что dbId не будет реорганизован, если бы был выполнен оператор delete, идентификатор остался бы таким же, как и в нашем случае, останется фиксированным, а его соседние столбцы будут удалены.

listNames.setOnItemClickListener(new AdapterView.OnItemClickListener() 
       Cursor c = getContentResolver().query(PATH_URI, null, "_id=" + id, null, null); 

Фрагмент выше, где я поступил не так. Я сравнивал идентификатор listview (скорее, позицию позиции в представлении списка) и идентификатор db поставщика контента.

То, что я сделал, это сравнить другую строку, а точнее строку из моего db и того, что проецируется в моем ListView, я сначала установил глобальный arraylist (arNames). Тогда это:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Cursor c = getContentResolver().query(PATH_URI, null, "COLUMN_NAME= '" + arNames.get(position) + "'", null, null); 
0

проверить следующее условие и написать код.

если (c.moveToFirst()) {

// написать код

}

В элементе списка щелчком мыши вы даете список позицию элемента, это отличается для проверки идентификатора базы данных один раз.

+0

это помогло исключить исключение, хотя я до сих пор не могу получить правильный идентификатор во время OnClick. – paperflyy

0

Курсор всегда следует нулевой чек указателя, прежде чем продолжить:

.... 

if(c != null && c.moveToFirst()){ 
    // code comes here 

    c.close(); // Make sure to do this.. 
} 
Смежные вопросы