Как использовать Cursor Loader для доступа к полученным данным?

Я немного озадачен тем, как использовать курсор для доступа к нужным мне данным с помощью модели CursorLoader. Я смог использовать SimpleCursorAdapter и передать курсор методу swapCursor адаптера в методе onLoadFinished, который необходимо реализовать следующим образом.

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {

    facilityAdapter.swapCursor(cursor);

}

Теперь мне нужно запросить базу данных и на основе количества возвращенных строк вывести целое число. Как мне получить доступ к этой информации? Есть некоторая информация, которую я хотел бы сохранить (_id) определенных выбранных строк, чтобы я мог связать их и передать в следующее действие, потому что id - это внешний ключ в других таблицах базы данных, и мне нужно будет запросить базу данных. На сайте разработчиков Android я видел, что есть классы доступа к классу курсора, такие как cursor.getInt, cursor.getString, и т. Д., И я должен использовать их для доступа к данным, которые мне нужны.

1 ответ

Решение

Кажется, у вас есть два вопроса здесь... поэтому я отвечу на них оба. Поправь меня, если я неправильно понял твой вопрос...

  1. Чтобы получить количество строк в таблице, выполните простой запрос следующим образом:

    Cursor cur = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
    int numColumns = cur.getCount();
    cur.close();
    
  2. Получение идентификатора выбранного элемента на самом деле очень просто благодаря адаптерам Android. Вот пример, который описывает, как вы могли бы передать идентификатор другому действию (например, при нажатии элемента ListView).

    public class SampleActivity extends Activity implements
            LoaderManager.LoaderCallbacks<Cursor> {
    
        // pass this String to the Intent in onListItemClicked()
        public static final String ID_TAG = "id_tag";
    
        private SimpleCursorAdapter mAdapter;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            /* setup layout, initialize the Loader and the adapter, etc. */
    
            setListAdapter(mAdapter);
        } 
    
        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            final Intent i = new Intent(getApplicationContext(), NewActivity.class);
            i.putExtra(ID_TAG, id);
            // pass the id to NewActivity. You can retrieve this information in
            // the Activity's onCreate() method with something like:
            // long id = getIntent().getLongExtra(SampleActivity.ID_TAG, -1);
            startActivity(i);
        }
    }
    

    Вам нужно будет самостоятельно создать URI для запроса внешней базы данных. Это можно сделать с помощью чего-то вроде:

    Uri uri = Uri.withAppendedPath(CONTENT_URI, String.valueOf(id));
    

    где CONTENT_URI является подходящим CONTENT_URI для вашего ContentProvider,

Дайте мне знать, если это поможет!

Другие вопросы по тегам