2010-08-24 113 views
1

我想在我的应用程序中实现一个数据库。我正在关注编写我自己的ContentProvider的教程,但我对SQLiteOpenHelper :: getType感到困惑。我们应该编写它,实质上,编写一个开关,返回与我们正在处理的数据类型相对应的MIME类型。有人可以解释SQLiteOpenHelper getType

我不完全理解它。尽管我有一个例子,但我不确定,这里恰恰应该传达什么。如何确定我的不同数据表的MIME类型?有人能给我一个很好的解释吗?

tutorial

+0

您是否阅读过此文件: http://developer.android.com/reference/android/content/ContentProvider.html#getType%28android.net.Uri%29 – plugmind 2010-08-24 20:18:31

回答

6

我想实现我的应用程序的数据库。

这与ContentProvider无关。 A ContentProvider不需要使用数据库;数据库不需要被ContentProvider隐藏。

我下面一个约写我自己的ContentProvider的教程,但我感到困惑 SQLiteOpenHelper ::的getType。

SQLiteOpenHelper上没有getType()方法。我打算假设您在ContentProvider上提及getType()

什么恰恰应该在这里传达

嗯...一个MIME类型。

如何确定我的不同数据表的MIME类型?

对于数据库,您可能需要创建自己的MIME类型。请记住,ContentProvider不仅用于表格式结构 - 它也可用于返回文件。在这种情况下,您会尝试使用适用于相关文件的MIME类型。

有人能给我一个很好的解释吗?

您大概是在Web浏览器中查看此网页。当您单击链接或任何导致您在此处的内容时,Web浏览器向Web服务器发出HTTP请求,并提供一个URI为/questions/3559053/could-someone-explain-sqliteopenhelper-gettype的URI。 StackOverflow Web服务器返回页面的内容以及内容本身的MIME类型。后一部分很重要,特别是对于这个URI,因为没有文件扩展名。没有MIME类型,Web浏览器将不知道如何处理HTTP请求的结果。

Android遵循相同的模型。

例如,可以创建一个ACTION_VIEWIntent用于表示在ContactsContractContentProvider一个接触的Uri。但是,如果Android无法找出MIME类型,则无法使用Intent启动活动。Android需要询问ContentProvider,“哟,dawg,U给我一个这个Uri的MIME类型?”。然后,通过操作(ACTION_VIEW)和MIME类型,Android可以找到可以处理请求的匹配活动。

+0

感谢您的解释。因此,如果我使用ContentResolver来查询ContentProvider,那么是否意味着我不需要实现getType(),因为我使用AUTHORITY明确要求它?实际上,我以这种方式使用getType()返回null,它也可以。 – herbertD 2012-07-13 04:50:32

+0

@herbertD:“所以,如果我使用ContentResolver来查询ContentProvider,是否意味着我不需要实现getType(),因为我使用AUTHORITY明确要求它?” - 我不会指望这种行为,但这取决于你。 – CommonsWare 2012-07-13 10:43:08

+0

嗯,我看到,为完成,我会更好地添加它,以便供应商可以为更多的客户使用。谢谢回复! – herbertD 2012-07-13 10:57:24