Android ContentProvider,带空格的 URI(YYYY-MM-DD 中的日期 HH:MM:SS)

Android ContentProvider, URI with spaced (Date in YYYY-MM-DD HH:MM:SS)

我考虑将 String 解析为可与 ContentProvider 一起使用的 Uri 的最佳做法。此 Uri 应包含格式为 YYYY-MM-DD HH:MM:SS 的日期时间。

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

我可以在这个日期String.replace(' ', '+'); 然后 uri.getPathSegments().get(4).replace('+', ' ')

但也许有更好的方法来解决这个问题?

在 ContentProvider.update()

中,UriMatcher 似乎不匹配此类 URI

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);

首先,在UriMatcher中,“#”表示数字,“*”表示文本或精确。查看/frameworks/base/core/java/android/content/UriMatcher.java

中的源代码

我认为没有必要进行替换,Uri Builder 会对您的日期字符串进行编码,

    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() Returns 此日期为毫秒值。该值是自格林威治标准时间 1970 年 1 月 1 日午夜以来的毫秒数。

解析时间很简单,

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