当我为另一个活动提出意图时,我有一个被换掉的活动。 onPause调用saveState()来保存到目前为止的工作:
private void saveState() {
...
...
if (myUri == null) {
// Inserting a new record
*** myUri = getContentResolver().insert(ContentProvider.CONTENT_URI, values);
} else {
// Update an existing record
getContentResolver().update(myUri, values, null, null);
}
}
在调用getContentResolver()之前,ContentProvider.CONTENT_URI ='content://nz.co.bkd.extraTime.contentprovider/times'。
通话结束后,myUri ='times /#',其中#=行ID。我的问题是;返回的uri的'content:...'前缀在哪里?
在调用期间,调用ContentResolver.java并返回CreatedRow uri
ContentResolver.java
....
....
public final Uri insert(Uri url, ContentValues values)
{
IContentProvider provider = acquireProvider(url);
if (provider == null) {
throw new IllegalArgumentException("Unknown URL " + url);
}
try {
long startTime = SystemClock.uptimeMillis();
*** Uri createdRow = provider.insert(url, values);
long durationMillis = SystemClock.uptimeMillis() - startTime;
maybeLogUpdateToEventLog(durationMillis, url, "insert", null /* where */);
return createdRow;
} catch (RemoteException e) {
// Arbitrary and not worth documenting, as Activity
// Manager will kill this process shortly anyway.
return null;
} finally {
releaseProvider(provider);
}
}
此时,createdRow ='times /#'。
记录实际上已保存在Sqlite数据库中。
我是否必须在我的代码中添加uri前缀,还是应该返回完整的uri?