Адаптер курсора и пример sqlite

Здравствуйте, я ищу пример кода, в котором адаптер курсора используется с sqlite?


person Gainster    schedule 28.03.2011    source источник
comment
Это вообще не по теме. Спрашивать, как закодировать конкретный элемент, — это жизненная сила StackOverflow.   -  person Chris Rogers    schedule 30.01.2018
comment
Вот простой ответ: queception.com/question.php?question=106   -  person Stack Overflow    schedule 30.11.2019


Ответы (3)


Действительно простой пример.

Вот действительно простой, но очень эффективный пример. Как только вы освоите основы, вы сможете легко отталкиваться от них.

Использование адаптера курсора с SQLite состоит из двух основных частей:

  1. Создайте правильный Курсор из базы данных.

  2. Создайте собственный адаптер курсора, который берет данные курсора из базы данных и связывает их с представлением, с помощью которого вы собираетесь представлять данные.

1. Создайте правильный курсор из базы данных.

В вашей деятельности:

SQLiteOpenHelper sqLiteOpenHelper = new SQLiteOpenHelper( 
        context, DATABASE_NAME, null, DATABASE_VERSION);

SQLiteDatabase sqLiteDatabase = sqLiteOpenHelper.getReadableDatabase();

String query = "SELECT * FROM clients ORDER BY company_name ASC"; // No trailing ';'

Cursor cursor = sqLiteDatabase.rawQuery(query, null); 

ClientCursorAdapter adapter = new ClientCursorAdapter(
        this, R.layout.clients_listview_row, cursor, 0 );

this.setListAdapter(adapter);

2. Создайте пользовательский адаптер курсора.

Примечание. Расширение от ResourceCursorAdapter предполагает, что вы используете XML для создания представлений.

public class ClientCursorAdapter extends ResourceCursorAdapter {

    public ClientCursorAdapter(Context context, int layout, Cursor cursor, int flags) {
        super(context, layout, cursor, flags);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        TextView name = (TextView) view.findViewById(R.id.name);
        name.setText(cursor.getString(cursor.getColumnIndex("name")));

        TextView phone = (TextView) view.findViewById(R.id.phone);
        phone.setText(cursor.getString(cursor.getColumnIndex("phone")));
    }
}
person Joshua Pinter    schedule 12.12.2013
comment
Думаю, это заслуживает большего количества баллов. Это очень ясно и полезно для понимания. - person Chris; 21.03.2014
comment
Спасибо @Крис. Если это поможет только вам, это стоит усилий. :) - person Joshua Pinter; 21.03.2014
comment
дублировать или нет, этот ответ является лучшим примером поиска курсора в Google и является самым ясным, что я видел. - person jmaculate; 17.10.2014
comment
Вот простой ответ: queception.com/question.php?question=106 - person Stack Overflow; 30.11.2019

Как использовать курсор в Android с необработанным запросом в sqlite:

Cursor c = sampleDB.rawQuery("SELECT FirstName, Age FROM mytable " +
           "where Age > 10 LIMIT 5", null);

if (c != null ) {
    if  (c.moveToFirst()) {
        do {
            String firstName = c.getString(c.getColumnIndex("FirstName"));
            int age = c.getInt(c.getColumnIndex("Age"));
            results.add("" + firstName + ",Age: " + age);
        }while (c.moveToNext());
    }
}
c.close();
person Eric Leschinski    schedule 08.01.2012
comment
Отличный пример. Позвольте мне предложить несколько улучшений, чтобы сократить его: 1. Удалите if (c != null). Причина: rawQuery не возвращает значение null, и если это так, в реализации Sqlite есть какая-то ошибка, и программа должна вылететь и отправить отчет об ошибке вместо того, чтобы молча ничего не делать. ... - person Heinzi; 01.04.2014
comment
... 3. Поместите try { после вызова rawQuery и поставьте } finally { ... } вокруг c.close(). Таким образом, курсор будет правильно закрыт в случае возникновения исключения во время выполнения курсора. - person Heinzi; 01.04.2014

Пример CursorAdapter с Sqlite

...
DatabaseHelper helper = new DatabaseHelper(this);
aListView = (ListView) findViewById(R.id.aListView);
Cursor c = helper.getAllContacts();
CustomAdapter adapter = new CustomAdapter(this, c);
aListView.setAdapter(adapter);
...

class CustomAdapter extends CursorAdapter {
    // CursorAdapter will handle all the moveToFirst(), getCount() logic for you :)

    public CustomAdapter(Context context, Cursor c) {
        super(context, c);
    }

    public void bindView(View view, Context context, Cursor cursor) {
        String id = cursor.getString(0);
        String name = cursor.getString(1);
        // Get all the values
        // Use it however you need to
        TextView textView = (TextView) view;
        textView.setText(name);
    }

    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        // Inflate your view here.
        TextView view = new TextView(context);
        return view;
    }
}

private final class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "db_name";
    private static final int DATABASE_VERSION = 1;
    private static final String CREATE_TABLE_TIMELINE = "CREATE TABLE IF NOT EXISTS table_name (_id INTEGER PRIMARY KEY AUTOINCREMENT, name varchar);";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_TIMELINE);
        db.execSQL("INSERT INTO ddd (name) VALUES ('One')");
        db.execSQL("INSERT INTO ddd (name) VALUES ('Two')");
        db.execSQL("INSERT INTO ddd (name) VALUES ('Three')");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

    public Cursor getAllContacts() {
        String selectQuery = "SELECT  * FROM table_name;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        return cursor;
    }
}
person Aswin Rajendiran    schedule 04.05.2013