2015-05-31 3 views
0

Я был на этом все выходные и Im в моем конце остроумия о том, как вернуть все записи в запросе в виде спискаAndroid SQLite Показать все записи в Listview

следующий код работает отлично

public void DisplayContact(String sitename) 
{ 
final DBAdapter db = new DBAdapter(this); 
db.open(); 

Cursor c = db.getAsset6(sitename); 
int mx=0; 
String[] lvdata = new String[c.getCount()-1]; 
while (c.moveToNext()) { 
lvdata[mx]=c.getString(2) + "-" + c.getString(1) + "-" + c.getString(6); 
mx++; 

} 
getActionBar().setTitle("Number of Records = " + mx); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
     R.layout.rowlayout, R.id.label, lvdata); 
setListAdapter(adapter); 

} 

public Cursor getAsset6(String strname) throws SQLException 
{ 
    Cursor mCursor = 
      db.query(true, DATABASE_TABLE, 
        new String[] {KEY_ROWID,KEY_FAULTREF,KEY_WORKNUM,KEY_ORIGNUM,KEY_REPBY,KEY_REPDATTIM,KEY_DESCRIPTION}, 
        KEY_REPBY + " LIKE ?", 
        new String[] { "%" + strname + "%" }, 
        null, null, null, null); if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor;       
} 

проблема заключается в том, что оленья кожа добавить первый элемент в запросе (т.е. есть 151 записей в запросе, но он помещает только 150 в ListView отсутствующего первую запись)

Я уверен, что его что-то делать с с. moveToFirst(); и заявление Do, но я прочитал каждую статью, которую я могу найти здесь, и любую комбинацию, которую я пытаюсь выполнить, сбой при запуске запроса в приложении. Я бегу приложение, используя внешнюю базу данных, так что я не могу видеть, Что вызывает сбой в затмении

Может один из вас SQL гуру помочь мне его сводит меня с ума

Ваша помощь оценили

Марк

ответ

0

Я считаю, что решение, чтобы удалить эту строку из из метода getAsset6():

mCursor.moveToFirst(); 

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

while (c.moveToNext()) 

Условие цикла в то время как оценивается первым, чтобы определить, является ли код, который должен работать следующим образом. Таким образом, это утверждение продвигает курсор во вторую строку до того, как вы начнете добавлять в свой массив lvdata []. Следовательно, первая строка пропускается. Удалив moveToFirst(), ваш код должен работать. MoveToNext() в цикле while установит курсор в первую строку в своей первой итерации, и вы получите все свои данные в массив. Если ваш курсор окажется пустым, moveToNext() вернет false, и ничего не будет добавлено в массив.

+0

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

+0

Можете ли вы добавить ошибку, которую вы получаете в свой вывод logcat, на свой вопрос? – NigelK

+0

Извините, Найджел, мне жаль, что я не знал, как это сделать. приложение работает на моем устройстве, так как оно использует базу данных на SD-карте, знаете ли вы какие-либо хорошие учебники о том, как это сделать? –

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