2011-03-13 56 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