我正在使用ez-vcard来解析Android上的一些VCard文件。这些VCard文件由Android的默认联系人应用程序生成。现在这些VCard文件的问题在于,这些文件包含“照片”的数据。由Android' Base64
类编码的属性。因此,当我使用Photo#getData()
方法时,我没有得到正确的解码'数据。所以我正在寻找一些工作,以便得到编码的'照片属性的数据字符串。任何帮助/建议将不胜感激。
编辑:我很确定Android的Base64类正在创建问题,因为当我使用带有照片的ez-vcard写一个VCard文件并尝试使用默认联系人应用程序打开此文件时,它会给出一个VCard解析错误但是当我编写由Android的Base64类编码的照片字符串时,一切正常。
要获取已编码的照片数据字符串,我还尝试使用VCard#getExtendedProperty("PHOTO")
方法,但它返回 null 。
答案 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"
}
}