StringBuilder, похоже, исчерпал свои возможности

мое приложение извлекает VCards как строки и объединяет все в большую строку через StringBuilder

public String getVcardStrings() throws Exception {
    Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
    StringBuilder builder = new StringBuilder();
    if (cursor.moveToFirst()) ;
    do {
        String s = getVCardStringFromContact(cursor);
        L.d("VCARD", s);
        builder.append(s);
    } while (cursor.moveToNext());
    cursor.close();

    L.d("VCARD", "Output: \n" + builder.toString());
    return builder.toString();
}

Вывод каждого вызова getVCardAsString () правильный. Он содержит все данные. но вызов builder.toString () возвращает только данные vcard 1,5 контактов, что составляет около 4 КБ текстовых данных, а остальное просто отсутствует!

Нет никаких исключений, и я читал, что емкость StringBuilders теоретически достигает 4 ГБ. Теперь у меня вопрос, что здесь происходит?


person Marian Klühspies    schedule 08.10.2013    source источник
comment
Каков результат двух строк журнала, которые у вас есть? Что вы в конечном итоге пытаетесь сделать с возвращенными строковыми значениями?   -  person SBerg413    schedule 08.10.2013
comment
Он действительно возвращает часть строки? Или вы имеете в виду, что лог выводит только часть? второй случай нормальный)   -  person Leonidos    schedule 08.10.2013
comment
Он не просто печатает 2 строки журнала, он фактически печатает около 25 строк, один полный контакт и половину. Это действительно может быть регистратор. Изменил его теперь, чтобы записывать сразу в файл после чтения контакта из базы данных, теперь эта проблема для меня устарела. все равно спасибо =)   -  person Marian Klühspies    schedule 08.10.2013


Ответы (1)


Я почти уверен, что это ложное срабатывание:

Другими словами, данные есть, но они усекаются программой logcat. Это наблюдение, казалось бы, подтверждается следующим определением:

#define LOGGER_ENTRY_MAX_LEN        (4*1024)

Это потрясающие 4 КБ и напрямую связано с тем, что вы испытываете.

Запишите результат в файл, чтобы проверить, действительно ли он там.

person sweetlilmre    schedule 08.10.2013
comment
где мне поставить эту строчку? - person Marian Klühspies; 08.10.2013
comment
Это определение есть в ОС Android. Вы ничего не можете сделать, чтобы изменить его, кроме создания собственного ПЗУ. Если вы хотите проверить это очень быстро, выведите строку в TextView и посмотрите, получите ли вы все, что ожидаете. - person sweetlilmre; 09.10.2013