2015-11-06 82 views
-3

我想要移動到並顯示下一個查詢結果,我見過的示例引用count = 1或獲取所有記錄,但無法計算出它們如何被執行。Next和Previous按鈕然後顯示記錄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,我已經被炎熱的其他例子能夠開始工作。

任何幫助或例子將不勝感激。

[編輯]

@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

問題是你正在通過記錄。

如果你是第一個記錄(以及在獲取記錄集你是不是,直到移動到第一個或下一個記錄),那麼你就循環到最後一個記錄,只得到上次顯示。

如果你在第一個記錄上(當你檢索一個記錄集,你不是,直到你移動到第一個或下一個記錄),然後你停在第一次迭代,因爲你可以'在第一條記錄之前移動。

我會做的是重寫你的按鈕點擊監聽器,一旦你獲得了遊標,就簡單地提高或降低一個位置。

所以,讓我們說土特產品檢索光標這樣的:

// 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() 
} 

足夠。

[編輯]

您編輯您的問題,但我看你不明白我的回答完全。
您必須將鼠標移到Click監聽器的外部。

這就是爲什麼你variable c is already defined in method onClick(View)

所以,onClick()方法之前移動這部分

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

此外,您還可以在switch()後招行

DisplayData(c); 

,而不是在所有情況下重複它。
無論如何它必須被執行。

+0

方法中定義了,謝謝你的回覆。我嘗試了你的建議,但我顯然沒有正確理解,現在我的代碼如下。 –

+1

謝謝搭檔,讓它工作。有很多學習要做,包括這個網站的工作方式。 ;-) –

相關問題