2011-03-13 58 views
2
Cursor cursor = resolver.query(
    Data.CONTENT_URI, 
    DataQuery.PROJECTION, 
    DataQuery.SELECTION, 
    new String[] {String.valueOf(rawContactId)}, 
    null); 

随着凸起在:安卓:内容解析器查询返回0行,当它不应该

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不会返回值,我做了日志检查。为了给它一些上下文,我正在使用帐户同步。这里的目标是找到现有联系人的数据列,并使用任何新数据对它们进行编写。我正在从Android提供的以下示例代码工作:http://developer.android.com/resources/samples/SampleSyncAdapter/src/com/example/android/samplesync/platform/ContactManager.html

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

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

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类:

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类构造函数用于添加新联系人。这里的源代码是一个用户名,和我在SELECTION参数中调用的一样。

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()); 
} 

谢谢!

+0

您确定您使用的是RawContactId本身?因为代码看起来很好,我dint有任何问题实现相同。确保值{String.valueOf(rawContactId)}确实是RawContactId而不是ContactId。对代码的进一步引用将有助于回答。 – 2011-03-13 09:09:58

+0

我将在稍后添加获取rawContactId的代码。 – JMRboosties 2011-03-13 09:34:19

+0

什么是UserIdQuery.COLUMN_ID的值? – 2011-03-13 10:20:26

回答

1

相比有没有在lookupRawContactId方法错误,rawcontactId长,我越来越不正确的。它应该看起来像这样:

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

有,我可以使用以下查询找到了几个问题:

Cursor cursor = resolver.query(Data.CONTENT_URI, 
           UserIdQuery.PROJECTION, 
           UserIdQuery.SELECTION, 
           new String[] {username}, null); 
  1. 如果所有列在表RawContacts指出,那么你应该使用RawContacts.CONTENT_URI而不是Data.CONTENT_URI
  2. 这里RawContacts.SOURCE_ID的值与用户名

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

Ah yea ...示例应用程序中的SOURCE_ID是来自正在同步的联系人管理器的userId。我没有一个,所以我选择了用户名作为标识符。我会看看它并发布结果,谢谢你的提示! – JMRboosties 2011-03-13 18:23:35

+0

它看起来像source_id不是问题,我发布了代码,我在上面设置ID。我将尝试从Data.CONTENT_URI更改为RawContacts.CONTENT_URI并查看它是如何发生的。谢谢! – JMRboosties 2011-03-13 21:34:25

+0

我从将其更改为RawContacts时遇到以下错误。CONTENT_URI 03-13 14:36:25.824:ERROR/DatabaseUtils(2456):java.lang.IllegalArgumentException:列mimetype无效 – JMRboosties 2011-03-13 21:41:51