2013-10-04 33 views
0

大家好我想顯示記錄。但是,我不想在listview中顯示它們,而是在textview中顯示它們。我已經在做新的換行\ n來完成這個技巧,但是在我的程序中,它只是顯示了第一條記錄。在textview中顯示多行Android

這是我到目前爲止已經試過:

MainActivity.class

Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     dog_name = extras.getString("dog_name"); 
     cursor = dbHelper.fetchbBreedByName(dog_name); 

     strID = cursor.getString(0); 
     strDesc = cursor.getString(cursor.getColumnIndexOrThrow("description")); 
     strDiet = cursor.getString(cursor.getColumnIndexOrThrow("diet")); 
     strShelter = cursor.getString(cursor.getColumnIndexOrThrow("shelter")); 
     strHygiene = cursor.getString(cursor.getColumnIndexOrThrow("hygiene")); 
     strMedication = cursor.getString(cursor.getColumnIndexOrThrow("medication")); 
     strBreed = cursor.getString(cursor.getColumnIndexOrThrow("breed")); 

     Log.d("Animal ID", "Animal ID is " + strID + " and breed is " + strBreed); 
     Log.d("Desc", "Desc " + strDesc); 
     Description.setText(strDesc); 
     Diet.setText(strDiet); 
     Shelter.setText(strShelter); 
     Hygene.setText(strHygiene); 
     Medication.setText(strMedication); } 

DBHelper.class

 public Cursor fetchbBreedByName(CharSequence inputText) throws SQLException { 

     Cursor mCursor = null; 
     if (inputText == null || inputText.length() == 0) { 
     mCursor = myDataBase.query(DB_TABLE, new String[] { KEY_ID, KEY_DESCRIPTION, 
       KEY_DIET, KEY_SHELTER, KEY_HYGIENE, KEY_MEDICATION, KEY_BREED }, 
     null, null, null, null, null); 

     } 
     else { 
      String qry = "SELECT _id, description, diet, shelter, hygiene, medication, " + 
       "breed FROM tblAnimalInfo WHERE breed LIKE '%" + inputText + "%';"; 

      mCursor = myDataBase.rawQuery(qry, null); 
     //mCursor = myDataBase.query(DB_TABLE, new String[] { KEY_ID, KEY_DESCRIPTION, 
     //  KEY_DIET, KEY_SHELTER, KEY_HYGIENE, KEY_MEDICATION, KEY_BREED }, 
     // KEY_BREED + " like '%" + inputText + "%'", null, null, null, null); 
     } 
     if (mCursor != null) { 
     mCursor.moveToFirst(); 
     } 
     return mCursor; 

} 

我不知道什麼是錯的。請幫我弄清楚我的代碼中缺少什麼。提前致謝。

回答

0

看來你只是加載你的光標給出的第一行。你必須使用cursor.moveToNext();以便能夠獲取其餘的數據。看看下面的例子:

// Getting All Contacts 
public List<Contact> getAllContacts() { 
List<Contact> contactList = new ArrayList<Contact>(); 
// Select All Query 
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

SQLiteDatabase db = this.getWritableDatabase(); 
Cursor cursor = db.rawQuery(selectQuery, null); 

// looping through all rows and adding to list 
if (cursor.moveToFirst()) { 
    do { 
     Contact contact = new Contact(); 
     contact.setID(Integer.parseInt(cursor.getString(0))); 
     contact.setName(cursor.getString(1)); 
     contact.setPhoneNumber(cursor.getString(2)); 
     // Adding contact to list 
     contactList.add(contact); 
    } while (cursor.moveToNext()); 
} 

// return contact list 
return contactList; 

}

0

你缺少cursor.moveToNext()函數來移動到下一個記錄,如前面提到的。除此之外,我想提一下編碼風格中的其他一些問題。您不應該在查詢函數本身中調用moveToFirst(),而是在實際遍歷記錄的地方使用它。另外請確保您正確關閉光標。所以,你的代碼應該是這樣的:

cursor = dbHelper.fetchbBreedByName(dog_name); 
if (cursor != null) { 
    if (cursor.moveToFirst()) { 
     do { 
      .... 
      < access the record > 
      ...  
     } while (cursor.moveToNext()); 
    } 

    cursor.close(); // very important 
} 

而且從fetchbBreedByName刪除這些行()

if (mCursor != null) { 
    mCursor.moveToFirst(); 
} 
+0

感謝您的回答,我可能會問什麼應該放在訪問記錄中我的應用程序? – Dunkey

+0

用cursor.getString()讀取記錄的所有字段,你已經在做它了。 – sjdutta