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

50

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

  • 2
    Это не по теме вообще. Вопрос о том, как кодировать конкретный элемент, является источником жизненной силы StackOverflow.
Теги:
database
android-layout
android-cursoradapter

3 ответа

91
Лучший ответ

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

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

Существуют две основные части использования Адаптер курсора с SQLite:

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

  • Создайте собственный Адаптер курсора, который берет данные Курсор из базы данных и сопоставляет их с Вид, который вы собираетесь представлять данные с.

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")));
    }
}
  • 6
    Я думаю, что это заслуживает большего количества очков. Это очень понятно и полезно для понимания.
  • 3
    Спасибо @Chris. Если это поможет только вам, это стоило бы усилий. :)
Показать ещё 1 комментарий
35

В 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();
  • 14
    Отличный пример. Позвольте мне предложить несколько улучшений, чтобы сократить его: 1. Удалите if (c != null) . Причина: rawQuery не вернет rawQuery , и если это произойдет, в реализации Sqlite есть некоторая ошибка, и программа должна завершиться сбоем и отправить отчет об ошибке вместо того, чтобы ничего не делать. ...
  • 6
    ... 2. Удалите if (c.moveToFirst()) и замените do-while на некоторое while (c.moveToNext()) { ... } . Причина: rawQuery всегда возвращает курсор, расположенный перед первой строкой , поэтому первый moveToNext будет делать то же, что и moveToFirst. ...
Показать ещё 1 комментарий
16

Пример 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;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню