如何使用Cursor Loader访问检索到的数据?

时间:2012-01-17 23:22:56

标签: android sqlite android-cursor

我对如何使用游标使用CursorLoader模型访问我需要的数据感到困惑。我能够使用SimpleCursorAdapter并将光标传递给onLoadFinished方法中的适配器的swapCursor方法,您必须按如下方式实现该方法。

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

    facilityAdapter.swapCursor(cursor);

}

现在我需要查询数据库并根据返回的行数显示一个整数。我如何访问此信息?有一些信息我想要存储(_id)选定的某些行,以便我可以捆绑它并将其传递给下一个活动,因为id是其他数据库表中的外键,我需要查询数据库。在android开发者网站上我看到有游标类的访问方法,如cursor.getInt,cursor.getString等,我应该使用它们来访问我追踪的数据。

1 个答案:

答案 0 :(得分:4)

这里好像你有两个问题......所以我会回答他们两个问题。如果我误解了你的问题,请纠正我......

  1. 要获取表中的行数,请执行以下简单查询:

    Cursor cur = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
    int numColumns = cur.getCount();
    cur.close();
    
  2. 由于Android适配器,检索所选项目的ID实际上非常简单。下面是一个示例,概述了如何将id传递给另一个Activity(例如,单击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_URIContentProvider的相应CONTENT_URI。

  3. 如果有帮助,请告诉我!