0

我認爲什麼是解析字符串的URI可以用的ContentProvider使用的最佳實踐。此Uri應包含格式爲YYYY-MM-DD HH:MM:SS的DateTime。的Android的ContentProvider,URI有間隔(以YYYY-MM-DD HH:MM:SS)

'content://authority/basepath/someId/12/date/YYYY-MM-DD HH:MM:SS' 

我可以在這個日期String.replace(' ', '+'); 然後​​3210

但也許有這個問題的一些更好的辦法?

看來,這樣的URI不被UriMatcher在ContentProvider.update()

content://com.xxx.provider.XXXProvider/learning_stats/profile/1/access_date/2015-04-08+11:40:24

匹配,這是我的UriMatcher定義:

uriMatcher.addURI(AUTHORITY, BASE_PATH + "/profile/#/access_date/#", ROW_FOR_PROFILE_AND_ACCESS_DATE); 
+0

當我改uriMatcher.addURI(AUTHORITY,BASE_PATH + 「/資料/#/ ACCESS_DATE/*」,ROW_FOR_PROFILE_AND_ACCESS_DATE);它似乎與+替換工作。 –

回答

0

首先,在UriMatcher「 #「表示數字,」*「表示文本或確切。檢查/frameworks/base/core/java/android/content/UriMatcher.java

的源代碼,我不認爲有必要做更換,烏里生成器將編碼您的日期字符串,

Uri uri = new Uri.Builder().scheme("content").path("/authority/basepath/someId/12/date/YYYY-MM-DD HH:MM:SS").build(); 
    String date = uri.getPathSegments().get(5); 

編碼路徑,

/authority/basepath/someId/12/date/YYYY-MM-DD%20HH%3AMM%3ASS 

由於你看,字符':'也應該被替換,然後解碼的路徑是,

/authority/basepath/someId/12/date/YYYY-MM-DD HH:MM:SS 

或使用從Date.getTime()而不是日期字符串返回的毫秒值。

'content://authority/basepath/someId/12/date/12345434' 

getTime()將此日期返回爲毫秒值。該值是自1970年1月1日,格林威治標準時間午夜以來的毫秒數。

這很容易解析的時候,

Date time = new Date(12345434l);//12345434 is the value from URI. 
+0

我寧願編碼日期而不是轉換爲時間戳。看起來可能簡單加上替換導致uri與UriMatcher匹配。 –

+0

好的我嘗試這個解決方案與新的Uri.Builder()因爲我一直在使用Uri.parse()。它似乎確定作爲客戶端並不需要知道有關更換「」到「+」 :) –

+0

還要注意的是,在UriMatcher,「#」是指數字,「*」是指文本或精確 – yummy

相關問題