這是我在整個編程中遇到的最令人難以置信的錯誤。事實上,這是迄今爲止我最糟糕的一次。簡直不敢相信我已經花了4天時間,而且我還是一無所獲。我當然錯過了什麼。Android URI不匹配
這裏是從我的代碼的權限和CONTENT_URI變量:
public static final String AUTHORITY = "com.neonwarge.android.note.providers";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + NoteDatabaseHelper.NoteEntry.TABLE_NAME);
我已經看了很多帖子,他們都是專門針對他們的問題不是很普遍,在我的情況非常無益的。
因此,這裏是我的URI的代碼:
static
{
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME, NOTES);
// This never gets detected
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/#", NOTES_ID);
//
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/#/", ALL_NOTES_BY_YEAR);
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/#/*", ALL_NOTES_BY_YEAR_MONTH);
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/#/*/#", ALL_NOTES_BY_YEAR_MONTH_DAY);
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/count/" , NOTE_COUNT);
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/count/#/", NOTE_COUNT_BY_YEAR);
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/count/#/*/", NOTE_COUNT_BY_YEAR_MONTH);
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/count/#/*/#", NOTE_COUNT_BY_YEAR_MONTH_DAY);
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/position/#", NOTE_POSITION);
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/percount/", NOTE_PERCOUNT_BY_ALL_YEARS);
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/percount/#/", NOTE_PERCOUNT_BY_ALL_MONTHS);
mUriMatcher.addURI(AUTHORITY , NoteDatabaseHelper.NoteEntry.TABLE_NAME + "/percount/#/*/", NOTE_PERCOUNT_BY_ALL_DAYS);
}
當我調用ContentResolver的刪除它永遠不會檢測模式NOTES_ID。所以我很困惑我的content-uri匹配是否完全錯誤。這裏的概念是,如果我的路徑是
content://com.sample.prog/mydatabase/1
這意味着我需要刪除從「dmydatabasetabase」與ID = 1項。這不是NOTES_ID的情況,而是URI匹配器返回-1,這就是爲什麼在我的代碼中它永遠不會觸及NOTES_ID的情況。
這是我如何把它稱爲:
Uri uri = NoteProvider.CONTENT_URI.buildUpon().appendPath(String.valueOf(noteID)).build();
在顯示我的任何幫助,我犯的錯誤,將不勝感激。我一直試圖弄清楚這個四天!雖然非常令人沮喪。
謝謝!
你試圖調試match()方法,不是嗎?結果是什麼? – pskink
我做了,它的-1,我發送這種形式的內容URI:content://com.sample.prog/mydatabase/1我的UriMatcher仍然看不到這個。 –
謝謝我再次運行我的調試器,這次我仔細查看了URI的所有實例,直到ContentResolver的調用。它似乎正在返回不同的值,因爲我的URI導致/#和/#/這導致模糊。我通過向URI添加ID /路徑來解決此問題。但解決這個問題也沒有解決問題。它返回一個帶有%2EF的路徑,看起來反斜槓沒有編碼,所以我使用.appendEncodedPath()代替。謝謝您的幫助! –