Как использовать Cursor Loader для доступа к полученным данным? - PullRequest
3 голосов
/ 18 января 2012

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

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

    facilityAdapter.swapCursor(cursor);

}

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

1 Ответ

4 голосов
/ 18 января 2012

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

  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.

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

...