【问题标题】:cursor loader query contact detail can't correctly detect the changes游标加载器查询联系人详细信息无法正确检测更改
【发布时间】:2017-12-14 16:27:34
【问题描述】:

我参考了这个link android 开发人员培训来实现使用选择标准检索联系人详细信息

/*
     * Defines the selection clause. Search for a lookup key
     * and the Email MIME type
     */
    private static final String SELECTION =
            Data.LOOKUP_KEY + " = ?" +
            " AND " +
            Data.MIMETYPE + " = " +
            "'" + Email.CONTENT_ITEM_TYPE + "'";

@Override
    public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
        // Choose the proper action
        switch (loaderId) {
            case DETAILS_QUERY_ID:
            // Assigns the selection parameter
            mSelectionArgs[0] = mLookupKey;
            // Starts the query
            CursorLoader mLoader =
                    new CursorLoader(
                            getActivity(),
                            Data.CONTENT_URI,
                            PROJECTION,
                            SELECTION,
                            mSelectionArgs,
                            SORT_ORDER
                    );
            ...
    }

例如,当进入更改联系人姓名时。然后在一种情况下,当我们的应用程序添加联系人时,游标加载器无法正确检测到更改。我检查了查找键,添加的联系人键与其他键不同(例如:Orod-1340xxxxxxxx)。

搜索讨论后,查找键可能会更改,建议使用带有查找键的联系人查找 uri。但是在上述查询中不能使用查找 uri。我需要在数据表中查询详细信息。

我怎样才能做到这一点? 非常感谢。

【问题讨论】:

    标签: android android-contacts


    【解决方案1】:

    尝试使用CONTACT_ID 而不是LOOKUP_KEY

    private static final String SELECTION =
        Data.CONTACT_ID + " = ? AND " +
        Data.MIMETYPE + " = '" + Email.CONTENT_ITEM_TYPE + "'";
    

    您可能会偶然发现不使用联系人 ID 而是使用查找键或查找 uri 的警告,但这是为了将联系人引用持久保存到数据库中以便长期保存,如果您的应用程序当前已启动并正在运行,并且只是最近查询了这个contact-id,使用它非常安全,可以,最好使用contact-ids,因为它作为一个独立的id更稳定。

    查看更多信息 herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 2013-11-11
      • 2011-11-27
      • 2018-10-29
      相关资源
      最近更新 更多