2014-10-31 3 views
1

Я использую ez-vcard для разбора некоторых файлов VCard на Android. Эти файлы VCard создаются приложением Android Contact Contact. Теперь проблема с этими файлами VCard заключается в том, что эти файлы содержат данные для свойства «PHOTO», которое было закодировано классом Android Base64. Поэтому, когда я использую метод Photo#getData(), я не получаю правильные «декодированные» данные. Поэтому я искал некоторую работу, чтобы получить «закодированную» строку данных для свойства фотографии. Любая помощь/предложения будут оценены.Как получить «закодированные» данные фотографий в ezvcard?

Edit: Я уверен, что Base64 класс Android создает проблемы, потому что, когда я пишу файл VCard с помощью эз-визитку с фотографией и попробуйте открыть этот файл по умолчанию приложение Контакты, это дает ошибку VCard синтаксического анализа но когда я пишу строку фото, закодированную базовым классом Android, все работает нормально.

Чтобы получить кодированную строку данных фотографий, я также попытался использовать метод VCard#getExtendedProperty("PHOTO"), но он возвращает null.

ответ

0

Странно, что функция base64 для Android работает по-разному. Я бы подумал, что алгоритм base64 должен работать одинаково везде. ий

Если вам нужно получить необработанное строковое значение свойства PHOTO, вы можете создавать собственные писцовые и свойства классов, а затем зарегистрировать класс писец с анализатором, например, так:

public class PhotoRawScribe extends VCardPropertyScribe<PhotoRaw> { 
    public PhotoRawScribe() { 
    super(PhotoRaw.class, "PHOTO"); 
    } 

    @Override 
    protected VCardDataType _defaultDataType(VCardVersion version) { 
    return null; 
    } 

    @Override 
    protected String _writeText(PhotoRaw property, VCardVersion version) { 
    return property.getValue(); 
    } 

    @Override 
    protected PhotoRaw _parseText(String value, VCardDataType dataType, VCardVersion version, VCardParameters parameters, List<String> warnings) { 
    return new PhotoRaw(value); 
    } 
} 

public class PhotoRaw extends SimpleProperty<String> { 
    public PhotoRaw(String value) { 
    super(value); 
    } 

    public static void main(String args[]) throws Exception { 
    String str = 
    "BEGIN:VCARD\r\n" + 
    "VERSION:4.0\r\n" + 
    "PHOTO:foobar\r\n" + 
    "END:VCARD"; 

    VCardReader reader = new VCardReader(str); 
    reader.registerScribe(new PhotoRawScribe()); 
    VCard vcard = reader.readNext(); 

    PhotoRaw photo = vcard.getProperty(PhotoRaw.class); 
    System.out.println(photo.getValue()); //prints "foobar" 
    } 
} 
+0

Спасибо за ответ ! Я также немного удивлен Android-платформой Base64, но из того, что я испытал, похоже, что Base64 на базе Android немного отличается. Или может быть, это просто проблема с Android-приложениями для контактов. :) – ashu

Смежные вопросы