gpt4 book ai didi

光标更改时不调用 Android OnLoadFinished()

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:56 26 4
gpt4 key购买 nike

我创建了一个简单的 Activity它实现了 LoaderManager.LoaderCallbacks<Cursor>界面。OnCreateLoader()很简单:

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args)
{
Log.d(TAG, "On create loader");

Uri queryUri = ContentUris.withAppendedId(SmartPresentationMessage.Person.CONTENT_URI, 1);
CursorLoader cursorLoader = new CursorLoader(this, queryUri, null, null, null, null);
return cursorLoader;
}

当我调用 getLoaderManager().initLoader(0, null, this) 时调用此方法当Activity被 build 。

我的问题是在我的 ContentProvider 上,其中有以下 query()方法:

@Override
public Cursor query(Uri uri, String[] projection, String where,
String[] whereArgs, String sortOrder)
{
int match = sUriMatcher.match(uri);

Cursor queryCursor;
SQLiteDatabase mdb = mOpenHelper.getReadableDatabase();

switch (match)
{
case PERSON:
long personID = ContentUris.parseId(uri);

queryCursor = mdb.query(TABLE_NAME, projection,
SmartPresentationMessage.Person._ID + " = " + personID,
whereArgs, null, null, sortOrder);

asyncQueryRequest("" + (taskTag ++ ) , QUERY_URI + "/" + "person");

return queryCursor;
default:
throw new IllegalArgumentException("unsupported uri: " + uri);
}
}

queryCursor在我收到网络服务器的响应后在数据库中更新。但是,当我调用 getContext().getContentResolver().notifyChange(uri, null) ContentProvider 中的方法的更新方法,我的OnLoadFinished() Activity 上的方法不被调用,即使 uri 与实例化 CursorLoader 时使用的相同.

这是 ContentProvider 上的更新方法:

@Override
public int update(Uri uri, ContentValues values, String where, String[] whereArgs)
{
//getContext().getContentResolver().notifyChange(uri, null);


// insert the initialValues into a new database row
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
int affected;
try
{
switch (sUriMatcher.match(uri))
{
case PERSON:
long personID = ContentUris.parseId(uri);;
affected = db.update(TABLE_NAME, values,
SmartPresentationMessage.Person._ID + " = " + personID,
whereArgs);
getContext().getContentResolver().notifyChange(uri, null);

break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
}
finally
{
db.close();
}

return affected;
}

谁能告诉我我的 OnLoadFinshed() 的原因是什么?调用 notifyChange() 时未调用方法在同一个 uri 上?

谢谢,克里斯蒂

最佳答案

在您的提供商的query() 方法中返回您的Cursor 之前,您需要调用以下方法

cursor.setNotificationUri(contentResolver, uri); 

您可以通过 Context 获取 ContentResolver。在 ContentProvider 中有一个方法 getContext() 用于此。

关于光标更改时不调用 Android OnLoadFinished(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com