2011-08-19 90 views
6

我完全能夠通過一個與下面的代碼添加聯繫人之一:添加多個聯繫人批量

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

    ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build()); 

    ops.add(ContentProviderOperation 
      .newInsert(Data.CONTENT_URI) 
      .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
      .withValue(Data.MIMETYPE, 
        CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
        .withValue(StructuredName.GIVEN_NAME, "Hello") 
        .withValue(StructuredName.FAMILY_NAME, "World").build()); 

    try { 
     getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (OperationApplicationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

然而,當我試圖通過一個新增約500個聯繫人之一 - 它需要幾分鐘的時間,這是我的應用程序太長。添加多個聯繫人的方法是否更快?

+1

你可以添加他們在一個線程 - 而不是UI線程。 – Phil

+0

我在單獨的線程中執行它,問題在於操作本身需要太多時間。在iPhone中,500個聯繫人需要幾秒鐘的時間。 – lstipakov

+0

我以類似的方式執行此操作,但每次我要添加聯繫人時都會執行批處理。我不認爲這是正確的方式,但它似乎工作沒關係 –

回答

0

爲什麼不把ArrayList的一個全球性的,可以從任何活動訪問我不會插入多成束因爲有更多的打算,當你做,它只是爲了傳遞少量信息。我會做這樣的,確保在清單中也叫這個..

public class MyStates extends Application { 

    private ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

    public ArrayList getList() { 
    return this.blueToothAdapter; 
    } 

    public void setList(ArrayList<ContentProviderOperation> o) { 
     this.ops= o; 
    } 
+0

這是怎麼回事的相關對我的問題? – lstipakov

+0

這是一個合法的答案,而不是使用Bundle來傳遞大量的數據來創建一個可供所有活動訪問的全局數組。 – JPM

+0

我沒有問題在活動之間傳遞數據。我有一個緩慢的聯繫人API的問題。 – lstipakov

0

您可以使用您使用通過使小的修改添加在單個批處理操作多個聯繫人相同的功能。

您可以高達500點的操作添加到一個批量操作,你可以保持在包括數據開放的操作與raw_contacts的相應指數的反向引用插入操作。

+1

你可以擴大這個答案,什麼小的修改?我有類似的問題,但循環代碼似乎會導致(未知)的聯繫人被添加。 [鏈接](http://stackoverflow.com/questions/11886900/inserting-multiple-contacts-in-android-2-3-5) –