0

こんにちは皆さん、レコードを表示したいです。ただし、リストビューではなくテキストビューで表示したいと思います。トリックを実行するには、新しい改行 \n を実行する必要がありますが、私のプログラムでは、最初のレコードが表示されるだけです。

これは私がこれまでに試したことです:

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;

}

何が悪いのかわからない。私のコードに何が欠けているかを理解するのを手伝ってください。前もって感謝します。

4

2 に答える 2

0

Cursor によって指定された最初の行のみをロードしているようです。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;

}

于 2013-10-05T00:05:34.233 に答える
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();
}
于 2013-10-05T03:22:49.623 に答える