Когда я вставляю контакт, он вставляется правильно, но я получаю «неназванную» запись сверху без данных - PullRequest
0 голосов
/ 28 июня 2011

РЕДАКТИРОВАТЬ: я подозреваю, что это происходит из-за ошибки в моем интерфейсе HTC Sense.Я также принял бы ответ, позволяющий мне проверить эту теорию, не теряя при этом никаких данных телефона (т.е. полный сброс или иное).Телефон HTC Incredible под управлением Froyo 2.2.

Я пытаюсь вставить большую группу контактов (анализируется в объект через XML, но в основном из пользовательского объекта), и у меня возникла вышеуказанная проблема.

Контакты добавляются просто отлично (в учетную запись "com.google"), но для каждого добавленного контакта в начало списка добавляется контакт "без имени" без данных.

ctaList - мой список контактов для добавления

tempFlr - мой объект, содержащий все контакты, которые нужно добавить изначально.

Код:

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

---------------------------------------------------------------------------
ArrayList<ContactToAdd> ctaList = new ArrayList<ContactToAdd>();
                constructCtaList(tempFlr, ctaList);

                ops.addAll(fillContentProviderOperation(accounts, ctaList,
                        ops));

---------------------------------------------------------------------------

private void constructCtaList(final FrontLineResponse tempFlr,
                ArrayList<ContactToAdd> ctaList) //
{
    for (Customer c : tempFlr.Customers) //
    {
        for (Applicant app : c.Applicants) //
        {
            ContactToAdd cta = constructContactToAdd(c, app);
            ctaList.add(cta);
        }
    }
}

---------------------------------------------------------------------------

protected ArrayList<ContentProviderOperation> addToContacts(
        ContactToAdd cta, int opsLength, Account[] accounts) //
{

    // opsLength is used to store the index to point at the RawContact
    // created here
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

    ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
            .withValue(RawContacts.ACCOUNT_TYPE, accounts[0].type)
            .withValue(RawContacts.ACCOUNT_NAME, accounts[0].name).build());

    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
            .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
            .withValue(StructuredName.GIVEN_NAME, cta.FirstName)
            .withValue(StructuredName.FAMILY_NAME, cta.LastName).build());

    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
            .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
            .withValue(Phone.NUMBER, cta.DayWorkPhoneNumber.PhoneNumber)
            .withValue(Phone.TYPE, Phone.TYPE_MOBILE).build());

    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
            .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
            .withValue(Email.DATA1, cta.Email)
            .withValue(Email.TYPE, Email.TYPE_MOBILE).build());

    ops.add(ContentProviderOperation
            .newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
            .withValue(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE)
            .withValue(StructuredPostal.STREET, cta.MailingAddress.Address1)
            .withValue(StructuredPostal.CITY, cta.MailingAddress.City)
            .withValue(StructuredPostal.REGION,
                    cta.MailingAddress.StateCode)
            .withValue(StructuredPostal.POSTCODE,
                    cta.MailingAddress.PostalCode)
            .withValue(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME)
            .build());

    ops.add(ContentProviderOperation
            .newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, opsLength)
            .withValue(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE)
            .withValue(StructuredPostal.STREET,
                    cta.ShippingAddress.Address1)
            .withValue(StructuredPostal.CITY, cta.ShippingAddress.City)
            .withValue(StructuredPostal.REGION,
                    cta.ShippingAddress.StateCode)
            .withValue(StructuredPostal.POSTCODE,
                    cta.ShippingAddress.PostalCode)
            .withValue(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK)
            .build());

    return ops;
}

Спасибо!

1 Ответ

0 голосов
/ 14 ноября 2011

Похоже, это особенность интерфейса Sense для HTC. Это было решено простой очисткой данных перед тем, как я вставил их в ContentProvider.

Надеюсь, это поможет любому, кто смущен этим!

...