インターフェイス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
が作成されたときに呼び出すと呼び出されます。
私の問題はContentProvider
、次のquery()
メソッドを持つ my にあります。
@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
ウェブサーバーから応答を受け取った後、データベースで更新されます。ただし、の update メソッドでメソッドを呼び出すと、 のインスタンス化時に使用したものと uri が同じであっても、 のgetContext().getContentResolver().notifyChange(uri, null)
メソッドは呼び出されません。ContentProvider
OnLoadFinished()
Activity
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;
}
同じURIOnLoadFinshed()
を呼び出したときにメソッドが呼び出されない原因を誰か教えてもらえますか?notifyChange()
ありがとう、クリスティ