【问题标题】:what are uri, contentValues什么是 uri,contentValues
【发布时间】:2011-11-17 14:15:08
【问题描述】:

谁能解释一下我在处理日历事件时使用的每个术语?

  1. Uri event_uri = Uri.parse("content://com.android.calendar/" + "events");
    这里的 uri 是什么,实际上是什么内容,因为我们可以将 int 值初始化为 0?是吗
    可以用默认值初始化 uri 吗?

  2. Uri reminder_uri = Uri.parse("content://com.android.calendar/" + "reminders");
    这些uri是什么意思? event_urireminder_uri有什么区别?

  3. ContentValues values = new ContentValues();
    values.put("calendar_id", 1);
    values.put("title", str);
    values.put("description", m_strDescription);

    第一个是做什么的? values.put("calendar_id", 1);

  4. ContentResolver cr = getContentResolver();
    内容解析器有什么用?有时我们会写:

    Uri u = cr.insert(event_uri, values)
    这是什么uri?它与前两个 uri 有何不同,例如 event_urireminder_uri

    再次values.put("event_id", Long.parseLong(event.getLastPathSegment())); cr.insert(remindar_uri, values);

    它有什么作用?

【问题讨论】:

    标签: android uri android-contentresolver


    【解决方案1】:

    关于问题 1 和 2,Uri 是一个指向重要事物的地址。在ContentProviders 的情况下,Uri 通常用于确定使用哪个表。所以event_uri 指向事件表,reminder_uri 指向提醒表。 uris 确实没有“默认值”。

    关于问题3,ContentValues本质上是一组键值对,其中键代表表的列,值是要插入该列的值。所以对于values.put("calendar_id", 1);,列是“calendar_id”,为该列插入的值为1。

    关于问题 4,ContentResolver 是 android 用来将 Uris 解析为 ContentProviders 的。任何人都可以创建ContentProvider,Android 有用于日历、联系人等的ContentProviders。ContentResolver 上的insert() 方法返回插入行的Uri。所以在问题 1 和 2 中,那些 Uris 指向表,但 Uris 是分层的,因此它们可以解析到特定行。例如:

    content://com.android.calendar/events 指向事件表,但是

    content://com.android.calendar/events/1 指向事件表中 id 为 1 的行。

    请记住,这是通常的行为,但提供 ContentProvider 可以自定义要以不同方式解析的 uri。

    我强烈建议阅读ContentProvider docs,尤其是Content URIs 部分。


    来自之前推荐的文档:

    在前面的代码行中,“words”表的完整 URI 是:

    content://user_dictionary/words

    user_dictionary 字符串在哪里 提供者的权限,words 字符串是表的路径。这 字符串content://scheme)始终存在,并标识此 作为内容 URI。

    【讨论】:

      【解决方案2】:

      内容值:

      public final class
      ContentValues
      extends Object
      implements Parcelable have public methods
      like: String getAsString(String KEY) , void put(Sring KEY, String value)
      e.g.
      
      public void createEntry(String name, String number){
          ContentValues cval = new ContentValues();
          cval.put(KEY_NAME, name);   // KEY_NAME is key just like parameter in put(String key)
          ....
          ....
          ....
      
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-20
        • 2011-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多