首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:内容解析器查询在不应该返回0行时返回0行

Android:内容解析器查询在不应该返回0行时返回0行
EN

Stack Overflow用户
提问于 2011-03-13 16:54:02
回答 2查看 10K关注 0票数 2
代码语言:javascript
运行
复制
Cursor cursor = resolver.query(
    Data.CONTENT_URI,
    DataQuery.PROJECTION,
    DataQuery.SELECTION,
    new String[] {String.valueOf(rawContactId)},
    null);

投影为:

代码语言:javascript
运行
复制
public static final String[] PROJECTION = new String[] {
    Data._ID,
    Data.MIMETYPE,
    Data.DATA1,
    Data.DATA2,
    Data.DATA3};

选择是:

public static final String SELECTION = Data.RAW_CONTACT_ID + "=?";

rawcontactId确实返回值,我已经做了日志来检查。为了给它提供一些上下文,我正在使用帐户同步。这里的目标是找到现有联系人的数据列,并用任何新数据覆盖它们。我正在使用安卓提供的以下示例代码:http://developer.android.com/resources/samples/SampleSyncAdapter/src/com/example/android/samplesync/platform/ContactManager.html

总结一下我的问题,我有两个联系人通过这个同步帐户添加,没有任何问题,但无法更新。有人有这方面的经验吗?谢谢。

编辑:这是我的rawContact返回方法

代码语言:javascript
运行
复制
private static long lookupRawContact(ContentResolver resolver, String username) {
    Log.e("Looking up Raw Contact", username);
    long authorId = 0;
    Cursor cursor = resolver.query(
        Data.CONTENT_URI,
        UserIdQuery.PROJECTION,
        UserIdQuery.SELECTION,
        new String[] {username},
        null);

    try {
        if(cursor != null && cursor.moveToFirst()) {
            authorId = cursor.getLong(UserIdQuery.COLUMN_ID);
        }
    } finally {
        if(cursor != null) {
            cursor.close();
        }
    }
    return authorId;
}

我得到的数字大概是3061。下面是UserIdQuery类:

代码语言:javascript
运行
复制
final private static class UserIdQuery {

    private UserIdQuery() {

    }

    public final static String[] PROJECTION = new String[] {RawContacts._ID};
    public final static int COLUMN_ID = 0;
    public static final String SELECTION = RawContacts.ACCOUNT_TYPE + "='" + 
        "com.tagapp.android" + "' AND " + RawContacts.SOURCE_ID + "=?";

}

下面是用于添加新联系人的ContactSyncOperations类的构造函数。这里的源id是一个用户名,与我在选择参数中调用的相同。

代码语言:javascript
运行
复制
public ContactSyncOperations(Context context, String username,
        String accountName, BatchOperationForSync batchOperation) {

    this(context, batchOperation);
    mBackReference = mBatchOperation.size();
    mIsNewContact = true;
    mValues.put(RawContacts.SOURCE_ID, username);
    mValues.put(RawContacts.ACCOUNT_TYPE, "com.tagapp.android");
    mValues.put(RawContacts.ACCOUNT_NAME, accountName);
    mBuilder = newInsertCpo(RawContacts.CONTENT_URI, true).withValues(mValues);
    mBatchOperation.add(mBuilder.build());
}

谢谢!

EN

Stack Overflow用户

回答已采纳

发布于 2011-03-21 07:20:35

lookupRawContactId方法中有一个错误,我得到的rawcontactId long不是正确的。它应该看起来像这样:

代码语言:javascript
运行
复制
private static long lookupRawContact(ContentResolver resolver, String username) {
    Log.e("Looking up Raw Contact", username);
    long authorId = 0;
    Cursor cursor = resolver.query(
        RawContacts.CONTENT_URI,
        UserIdQuery.PROJECTION,
        UserIdQuery.SELECTION,
        new String[] {username},
        null);

    try {
        if(cursor != null && cursor.moveToFirst()) {
            authorId = cursor.getLong(UserIdQuery.COLUMN_ID);
        }
    } finally {
        if(cursor != null) {
            cursor.close();
        }
    }
    return authorId;
} 
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5288384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档