Почему он не может прочитать ListView? - PullRequest
0 голосов
/ 30 января 2012

Когда я нажимаю на элемент ListView, я получаю следующее сообщение: Как я могу прочитать элемент и получить имя элемента в строку?

android.database.sqlite.SQLiteCursor@40706330

public void onListItemClick(
ListView parent, View v,
int position, long id)
{   
    Object o = this.getListAdapter().getItem(position);
    String keyword = o.toString();

    Toast.makeText(this, keyword, Toast.LENGTH_SHORT).show();

} 

Таким образом, я могу прочитать позицию из позиции:

    public void onListItemClick(
ListView parent, View v,
int position, long id)
{   
    open_database_rw();

    Object itemId = this.getListAdapter().getItemId(position);
    String item = itemId.toString();

    Toast.makeText(this, item, Toast.LENGTH_SHORT).show();

}  

Теперь мне нравится читать выбранные данные в тост. Я попробовал это так, но это не сработало:

public void onListItemClick(
ListView parent, View v,
int position, long id)
{   
    open_database_rw();

    Cursor cursor = db.query("tbl_homework", new String[] {"hw"}, 
            "_id = 1", null, null, null, null);

    int column = cursor.getColumnIndex("hw");
    String item = cursor.getString(column);

    Toast.makeText(this, item, Toast.LENGTH_SHORT).show();

} 

ErrorMessage: android.database.CursorIndexOutOfBoundsException: индекс -1 запрошен, с размером 1

Проблема была решена! Я должен был переместить курсор в первую очередь cursor.moveToFirst ();

Полный рабочий код:

public void onListItemClick(
ListView parent, View v,
int position, long id)
{   
    open_database_rw();

    Object itemId = this.getListAdapter().getItemId(position);
    String item = itemId.toString();

    Cursor cursor = db.query("tbl_homework", new String[] {"hw"}, 
            "_id =" + item, null, null, null, null);

    cursor.moveToFirst();
    int column = cursor.getColumnIndex("hw");
    String hw = cursor.getString(column);
    Toast.makeText(this, hw, Toast.LENGTH_SHORT).show();
}  

Ответы [ 3 ]

2 голосов
/ 30 января 2012

если вы не знаете, что вставили в свой ListView, то как вы можете указать, какой столбец читать?

в любом случае, вы можете попытать счастья, выполнив следующее:

public void onListItemClick(ListView parent, View v,int position, long id)
{   
    Cursor c = (Cursor) this.getListAdapter().getItem(position);

    // if 0 doesn't work then try 1, 2, 3
    // and so on (depending on your columns length)
    String keyword = c.getString(0);

    Toast.makeText(this, keyword, Toast.LENGTH_SHORT).show();
}
1 голос
/ 30 января 2012

Вызов getItem() возвращает «элемент», связанный с данной позицией в Adapter.В случае CursorAdapter, getItem() возвращает Cursor, установленное в правильное положение.Если вы хотите получить данные из Cursor, позвоните getString(), getInt() или любому другому получателю столбца через Cursor интерфейс .

0 голосов
/ 31 января 2012

Следующий код решит проблему:

public void onListItemClick(
ListView parent, View v,
int position, long id)
{   
    open_database_rw();

    Object itemId = this.getListAdapter().getItemId(position);
    String item = itemId.toString();

    Cursor cursor = db.query("tbl_homework", new String[] {"hw"}, 
            "_id =" + item, null, null, null, null);

    cursor.moveToFirst();
    int column = cursor.getColumnIndex("hw");
    String hw = cursor.getString(column);
    Toast.makeText(this, hw, Toast.LENGTH_SHORT).show();
}  

Необходимо переместить курсор в первую очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...