chr*_*iss 4 android cursor android-contentprovider android-cursorloader
我创建了一个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;
}
Run Code Online (Sandbox Code Playgroud)
当我getLoaderManager().initLoader(0, null, this)在Activity创建时调用时调用此方法.
我的问题是在我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
在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;
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我,OnLoadFinshed()当调用notifyChange()同一个uri 时,我的方法没有被调用的原因是什么?
谢谢,克里斯蒂
小智 10
在使用Cursor提供者的query()方法返回之前,您需要调用以下方法
cursor.setNotificationUri(contentResolver, uri);
Run Code Online (Sandbox Code Playgroud)
你可以ContentResolver通过a Context.在ContentProvider这里有一种方法getContext().
| 归档时间: |
|
| 查看次数: |
2466 次 |
| 最近记录: |