android 中的uri到底是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 中的uri到底是啥?相关的知识,希望对你有一定的参考价值。

有人说只是和http的一个路径一样。我记得http路径不都是叫url么 而且这个android中的uri是可以封装数据貌似。 Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")) 这句什么意思啊? 晕看着真晕

URI是统一资源标识符(Uniform Resource Identifier) 的意思,它的作用是根据这个URI找到某个资源文件,基本格式如: file:///sdcard/temp.jpg(就是根据你提供的例子生成的一个路径)
ContentProvider是程序间共享数据的,它也需要生成URI供别的程序调用,格式如:

content:///StudentDB/student/name,以后你在别的程序想访问另一个程序里的数据库,就可以用这个URI去访问了,而不用进行数据库连接的操作,非常方便
URL显得很宏观,是网络资源定位的,而URI是应用程序内部或之间定位
参考技术A 通用资源标志符(Universal Resource Identifier, 简称"URI")。
Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。
URI一般由三部分组成:
在Android平台,URI主要分三个部分:scheme, authority and path。
其中authority又分为host和port。格式如下:scheme://host:port/path
举个实际的例子:
content://com.example.project:200/folder/subfolder/etc
\---------/ \------------------ -/ \--/ \----------------------/
scheme host port path
\---------------------------/
authority

我们很经常需要解析Uri,并从Uri中获取数据。
Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。
掌握它们的使用,会便于我们的Android开发工作。
参考技术B 通用资源标志符(Universal Resource Identifier, 简称"URI")。
Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。
URI一般由三部分组成:
在Android平台,URI主要分三个部分:scheme, authority and path。
其中authority又分为host和port。格式如下:scheme://host:port/path
举个实际的例子:
content://com.example.project:200/folder/subfolder/etc
\---------/ \------------------ -/ \--/ \----------------------/
scheme host port path
\---------------------------/
authority

我们很经常需要解析Uri,并从Uri中获取数据。
Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。
掌握它们的使用,会便于我们的Android开发工作。

Mongoengine 中的“QuerySet”对象到底是啥?

【中文标题】Mongoengine 中的“QuerySet”对象到底是啥?【英文标题】:What exactly is the "QuerySet" object in Mongoengine?Mongoengine 中的“QuerySet”对象到底是什么? 【发布时间】:2013-02-15 12:20:10 【问题描述】:

根据 Mongoengine API 指南 (http://mongoengine-odm.readthedocs.org/en/latest/apireference.html):

class mongoengine.queryset.QuerySet(document, collection)

是“从查询返回的一组结果。包装一个 MongoDB 游标,提供 Document 对象作为结果。

当我在解释器中使用 type() 检查 QuerySet 对象时,它说 QuerySet 对象是 <class 'mongoengine.queryset.QuerySet'>,这与 API 指南一致。

我很困惑,因为为了实际访问 QuerySet 实例中的单个 Mongoengine Document 对象,我必须使用像 [0] (对于第一个 Documentobject)或 [2] (对于第三个Document 对象)See this SO question about slicing a QuerySet。有趣的是,您还可以在 QuerySet 实例上调用 len()

虽然 QuerySet 是一个类对象,但为什么它看起来像一个列表对象?据我所知,它不是从UserList 继承的,也没有data 属性。任何帮助将不胜感激。

谢谢。

编辑:

感谢您的建议@isbadawi。这很有帮助。 QuerySet 类对象确实包含 __getitem__ 方法,正如您的链接所暗示的那样,它“大致相当于”索引(例如,x.__getitem__(i) 大致相当于 x[i])。因此,如果 QuerySet 正在通过 __getitem__ 模拟列表类,那么实际的 Document 对象存储在类中的什么位置?在属性中?这是我的解释器中dir(QuerySet) 的输出:

> ['_QuerySet__already_indexed', '_QuerySet__dereference', '__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__len__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_as_pymongo', '_as_pymongo_coerce', '_build_index_spec', '_class_check', '_collection', '_collection_obj', '_cursor', '_cursor_args', '_cursor_obj', '_dereference', '_document', '_ensure_indexes', '_fields_to_dbfields', '_get_as_pymongo', '_get_scalar', '_hint', '_initial_query', '_item_frequencies_exec_js', '_item_frequencies_map_reduce', '_iter', '_limit', '_loaded_fields', '_lookup_field', '_mongo_query', '_ordering', '_query', '_query_obj', '_reset_already_indexed', '_scalar', '_skip', '_slave_okay', '_snapshot', '_sub_js_fields', '_timeout', '_transform_query', '_transform_update', '_translate_field_name', '_where_clause', 'all', 'all_fields', 'as_pymongo', 'average', 'clone', 'count', 'create', 'delete', 'distinct', 'ensure_index', 'exclude', 'exec_js', 'explain', 'fields', 'filter', 'first', 'get', 'get_or_create', 'hint', 'in_bulk', 'insert', 'item_frequencies', 'limit', 'map_reduce', 'next', 'only', 'order_by', 'rewind', 'scalar', 'select_related', 'skip', 'slave_okay', 'snapshot', 'sum', 'timeout', 'update', 'update_one', 'values_list', 'where', 'with_id']

【问题讨论】:

docs.python.org/2/reference/datamodel.html#special-method-names 【参考方案1】:

正如the code 中所见,QuerySet 是对 pymongo cursor 的一种抽象。因此QuerySet 内部没有存储空间。

当您调用 len() QuerySet.__len__ 时调用魔术方法,该方法返回 self.count() 的结果,该结果询问光标的计数。

等等。 QuerySet.__getitem__ 向光标询问相应的项目,QuerySet.first 也这样做。

当您对内部实现方式有疑问时,我强烈建议您查看代码。

【讨论】:

是正确的,它是 pymongo 光标的特定于 mongoengine 的包装器。它添加了特殊的方法来对文档进行全局操作,例如过滤、更新等。以及作为查询集的迭代器。

以上是关于android 中的uri到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章

android中的全屏意图到底是啥?

Android编程中onActivityResult的作用是啥?设么时候才会调用这个方法?

求助,凤凰操作系统到底是啥

小部件到底是啥?

Android的冰柱参数是啥?

Android中的Uri.parse()