2015-11-06 1 views
-3

Я пытаюсь переместить и отобразить следующий результат запроса, примеры, которые я видел, относятся к вещам вроде count = 1 или получить все записи, но не могут понять, как они .Следующие и предыдущие кнопки затем отображают запись SQLite Android

Я могу показать первую запись штрафа, но при попытке moveToNext В конечном итоге я заканчиваю последний результат, а moveToPrev ничего не делает. (Я предполагаю, что это имеет отношение к переменной счетчика я прочитал о)

DBHelper.Java

public Cursor PL_get_Record(String pldescription, SQLiteDatabase sqlitedatabase) { 
     String selection = PLDESCRIPTION + " LIKE ?"; 
     String[] selection_args = { 
     "%" + pldescription + "%" 
     }; 
     Cursor c = sqlitedatabase.query(PLTABLE_NAME, PL_All_Cols, selection, selection_args, null, null, null); 
     return c; 
    } 

MainActivity.Java - кнопка MoveToNext

public void btn_ParamNext(View view) { 
    dbhelper = new DbHelper(getApplicationContext()); 
    sqlitedatabase = dbhelper.getReadableDatabase(); 
    Cursor c = dbhelper.get_Record(Desc, sqlitedatabase); 
    while (c.moveToNext()) { 
    DisplayData(c); 
    } 
    c.close(); 
} 

MainActivity.Java - Кнопка MoveToPrevious

public void ParamPrev(View view) { 
    dbhelper = new DbHelper(getApplicationContext()); 
    sqlitedatabase = dbhelper.getReadableDatabase(); 
    Cursor c = dbhelper.get_Record(Desc, sqlitedatabase); 
    while (c.moveToPrevious()) { 
    DisplayData(c); 
    } 
    c.close(); 
} 

Другие примеры, которые я видел, относятся к RawQuery, способный вообще работать.

Любая помощь или примеры были бы очень оценены.

[EDIT]

@Frank, спасибо за Ваш ответ. Я попытался принять ваш совет, но я, очевидно, не понимаю, мой код теперь выглядит следующим образом.

DbHelper.java

public Cursor PL_get_Record (String pldescription, SQLiteDatabase sqlitedatabase) { 
String selection = PLDESCRIPTION+" LIKE ?"; 
String [] selection_args = {"%"+pldescription+"%"}; 
Cursor cursor = sqlitedatabase.query(PLTABLE_NAME, PL_All_Cols, selection, selection_args, null, null, null); 
return cursor; } 

OnClickListener с btnFirstRec, btnNext & btnPrev кнопки

private View.OnClickListener onClickListener = new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btnFirstRec: 
      dbhelper = new DbHelper(getApplicationContext()); 
      sqlitedatabase = dbhelper.getReadableDatabase(); 
      Cursor c = dbhelper.PL_get_Record(Desc, sqlitedatabase); 
      if (c != null) { 
       c.moveToFirst(); 
       DisplayData(c); 
      } 
      break; 

     case R.id.btnNext: 
      if (c != null && !c.isAfterLast()) { 
       c.moveToNext(); 
       DisplayData(c); 
      } 
      break; 

     case R.id.btnPrev: 
      if (c != null && !c.isBeforeFirst()) { 
       c.moveToPrevious(); 
       DisplayData(c); 
      } 
      break; 
    } 
} 
}; 

теперь я получаю сообщение об ошибке Variable c might not have been initialized

Если я изменю btnNext и btnPrev к

  dbhelper = new DbHelper(getApplicationContext()); 
      sqlitedatabase = dbhelper.getReadableDatabase(); 
      Cursor c = dbhelper.PL_get_Record(Desc, sqlitedatabase); 
      if (c != null && !c.isAfterLast()) { 
       c.moveToNext(); 
       DisplayData(c); 
      } 
      break; 

Я заканчиваю с

variable c is already defined in method onClick(View)

не уверен, что еще попробовать, пожалуйста, помогите.

+0

@Frank N. Stein Как остановить цикл? Я пробовал перерыв и возврат, но не работал. –

+0

Просто не петля. –

+0

Я добавил ответ. Смотрите, помогает ли это вам. –

ответ

1

Проблема в том, что вы проезжаете через записи.

Если вы находитесь на первой записи (и когда вы извлекаете набор записей , вы не, пока не перейдете к первой или следующей записи), то вы переходите к последней записи и получаете только последний дисплей.

Если вы находитесь на первой записи (и когда вы извлекаете набор записей , вы не, пока не перейдете к первой или следующей записи), то вы остановитесь на первой итерации, t двигаться до первой записи.

Что бы я сделал, это переписать кнопку для прослушивания нажатием кнопки, чтобы просто увеличить или уменьшить позицию после того, как вы получили курсор.

Так, скажем ему получить курсор, как это:

// You have to change your dbhelper method name to match - atually there's an extra "PL_" 
Cursor c = dbhelper.get_Record(Desc, sqlitedatabase); 
if (c != null) 
{ 
    c.moveToFirst(); // position on the first record, as soon as you get the cursor 
} 

Тогда в ваших кликах слушателей просто сделать (btnNext)

if (c != null && !c.isAfterLast) 
{ 
    c.moveToNext() 
} 

или (btnPRev)

if (c != null && !c.isBeforeFirst) 
{ 
    c.moveToPrevious() 
} 

Как адекватный.

[EDIT]

Вы изменили свой вопрос, но я вижу, вы не поняли мой ответ в полном объеме.
Вы должны получить курсор ВЗНОСИТЕ прослушиватель Click.

Вот почему вы получите variable c is already defined in method onClick(View)

Таким образом, переместить эту часть

dbhelper = new DbHelper(getApplicationContext()); 
sqlitedatabase = dbhelper.getReadableDatabase(); 
Cursor c = dbhelper.PL_get_Record(Desc, sqlitedatabase); 

перед методом onClick().

Кроме того, вы можете переместить линию

DisplayData(c); 

после switch(), вместо того чтобы повторять ее во всех случаях.
Это должно быть выполнено в любом случае.

+0

спасибо за ваш ответ. Я попытался принять ваш совет, но я, очевидно, не понимаю, мой код теперь выглядит следующим образом. –

+1

Спасибо, Mate, получил его работу. Имейте много обучения, включая, как работает этот сайт. ;-) –

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