如何进行编码' ezvcard中的照片数据?

时间:2014-10-31 13:50:26

标签: java android vcard

我正在使用ez-vcard来解析Android上的一些VCard文件。这些VCard文件由Android的默认联系人应用程序生成。现在这些VCard文件的问题在于,这些文件包含“照片”的数据。由Android' Base64类编码的属性。因此,当我使用Photo#getData()方法时,我没有得到正确的解码'数据。所以我正在寻找一些工作,以便得到编码的'照片属性的数据字符串。任何帮助/建议将不胜感激。

编辑:我很确定Android的Base64类正在创建问题,因为当我使用带有照片的ez-vcard写一个VCard文件并尝试使用默认联系人应用程序打开此文件时,它会给出一个VCard解析错误但是当我编写由Android的Base64类编码的照片字符串时,一切正常。

要获取已编码的照片数据字符串,我还尝试使用VCard#getExtendedProperty("PHOTO")方法,但它返回 null

1 个答案:

答案 0 :(得分:0)

奇怪的是,Android的base64功能的工作方式不同。我想,base64算法应该在任何地方都能正常工作。 O_O

如果需要获取PHOTO属性的原始字符串值,可以创建自定义划线和属性类,然后使用解析器注册scribe类,如下所示:

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"
  }
}