0

我正在 Honeycomb 上编写一个应用程序,但我的内容提供商的光标遇到了问题。我希望实现一个来自官方记事本示例的简单代码实现的效果:

Cursor note = mDbHelper.fetchNote(mRowId);
            startManagingCursor(note);
            mTitleText.setText(note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));

也就是说,我只是希望将光标当前位置的数据放入 EditText 以便用户可以编辑它。问题是我不知道如何使用 CursorLoader 执行此操作。我不能使用 managedQuery() 因为它已被弃用,无论如何我都必须调用 startManagingCursor() ,它也已被弃用。我该怎么做?提前致谢。

4

2 回答 2

0

代替:

CursorLoader loader = new CursorLoader(this, FlightBundleProvider.CONTENT_URI_PHASES, projection, "_id = ?", selectionArgs, null);
Cursor cursor = loader.loadInBackground();

你可以直接得到一个游标:

Cursor cursor = this.getContentResolver().query(FlightBundleProvider.CONTENT_URI_PHASES, projection, "_id = ?", selectionArgs, null);

(假设this是指上下文)。

[还使用其 ID 获取项目通常由返回单个项目的“content://authority/items/#”形式的 URI 处理,而不是在通常返回多个项目的 URI 上指定选择]

于 2012-12-10T12:10:21.007 回答
0

好的,我找到了答案,现在很明显了。我只是使用了这段代码:

String[] projection = { FlightBundleDatabase.ID, FlightBundleDatabase.COL_TITLE };
            String[] selectionArgs = { Long.toString(id) };

        CursorLoader cursorLoader = new CursorLoader(this, FlightBundleProvider.CONTENT_URI_PHASES, projection, "_id = ?", selectionArgs, null);
        Cursor cursor = cursorLoader.loadInBackground();

        if (cursor.moveToFirst()) {
            mPhaseName.setText(cursor.getString(cursor.getColumnIndexOrThrow(FlightBundleDatabase.COL_TITLE)));
        }
        cursor.close();

现在我只希望游标不会泄漏任何资源,但是 close() 应该处理好,对吧?

于 2012-05-25T15:18:29.620 回答