Unable to read vcards with address

yohan
2012-08-28
2012-09-11
  • yohan
    yohan
    2012-08-28

    Please have a look at the following code

    package vcardtest;

    import java.io.*;

    import java.util.Iterator;

    import java.util.logging.Level;

    import java.util.logging.Logger;

    import net.sourceforge.cardme.engine.VCardEngine;

    import net.sourceforge.cardme.vcard.VCard;

    import net.sourceforge.cardme.vcard.features.*;

    import net.sourceforge.cardme.vcard.types.parameters.TelephoneParameterType;

    import net.sourceforge.cardme.vcard.types.parameters.XTelephoneParameterType;

    public class VCardTest

    {

    public static void main(String args)

    {

    File vcardFile = new File("C:/Users/yohan/Contacts/Akon Kon.vcf");

    VCardEngine vcardEngine = new VCardEngine();

    try

    {

    VCard vcard = vcardEngine.parse(vcardFile);

    String name = vcard.getName().getGivenName();

    if(vcard.hasEmails())

    {

    EmailFeature email = vcard.getEmails().next();

    String sEmail = email.getEmail();

    System.out.println(sEmail);

    }

    if(vcard.hasNicknames())

    {

    NicknameFeature nickName = vcard.getNicknames();

    Iterator<String> nicknames = nickName.getNicknames();

    String sNickName = nicknames.next();

    System.out.println(sNickName);

    }

    // if(vcard.hasAddresses())

    //{

    //Iterator<AddressFeature> addresses = vcard.getAddresses();

    //AddressFeature address = addresses.next();

    //String streetAddress = address.getStreetAddress();

    //System.out.println(streetAddress);

    //}

    String telephone = "";

    //Getting the phone numbers

    Iterator<TelephoneFeature> itNumbers = vcard.getTelephoneNumbers();

    while (itNumbers.hasNext())

    {

    TelephoneFeature next1 = itNumbers.next();

    telephone = next1.getTelephone();

    // System.out.println(telephone);

    System.out.println("types = " + next1.getExtendedTelephoneParameterSize());

    Iterator<XTelephoneParameterType> itTypes =
    next1.getExtendedTelephoneParameterTypes();

    Iterator<TelephoneParameterType> itNTypes =
    next1.getTelephoneParameterTypes();

    while (itNTypes .hasNext())

    {

    TelephoneParameterType next = itNTypes .next();

    System.out.println(" - " + next.getType() + " / " + next.getDescription());

    if(next.getType().equals("CELL"))

    {

    System.out.println("Cell Phone Number: " + next1.getTelephone());

    }

    else if(next.getType().equals("HOME"))

    {

    System.out.println("Home Number is: " + next1.getTelephone());

    }

    }

    }

    System.out.println("----------------------------------------------------------
    -----------");

    System.out.println( name );

    //System.out.println(streetAddress);

    } catch (IOException ex)

    {

    ex.printStackTrace();

    }

    }

    }

    If I pass a VCard with an address, this generates the following error

    run: Exception in thread "main" java.lang.NoClassDefFoundError:

    org/apache/commons/codec/net/QuotedPrintableCodec at

    net.sourceforge.cardme.engine.VCardEngine.parseLabelType(VCardEngine.java:14
    32)

    at

    net.sourceforge.cardme.engine.VCardEngine.parseLine(VCardEngine.java:523)

    at

    net.sourceforge.cardme.engine.VCardEngine.parseVCard(VCardEngine.java:348)

    at

    net.sourceforge.cardme.engine.VCardEngine.parse(VCardEngine.java:254)

    at vcardtest.VCardTest.main(VCardTest.java:22) Caused by:

    java.lang.ClassNotFoundException:

    org.apache.commons.codec.net.QuotedPrintableCodec at

    java.net.URLClassLoader$1.run(URLClassLoader.java:366) at

    java.net.URLClassLoader$1.run(URLClassLoader.java:355) at

    java.security.AccessController.doPrivileged(Native Method) at

    java.net.URLClassLoader.findClass(URLClassLoader.java:354) at

    java.lang.ClassLoader.loadClass(ClassLoader.java:423) at

    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at

    java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 5 more Java

    Result: 1 BUILD SUCCESSFUL (total time: 2 seconds)

    Following the test VCard I used, which is generated by my phone, send to
    laptop and got converted to .contact, and manually converted back to .vcf
    using options in the contacts folder of windows.

    BEGIN:VCARD

    VERSION:2.1

    N:Kon;Akon

    FN:Akon Kon

    TEL;CELL;VOICE:0711111111

    ADR;HOME:;;195;Colj;Sri lanka

    LABEL;HOME;ENCODING=QUOTED-PRINTABLE:195=0D=0AColj, Sri lanka

    EMAIL;PREF;INTERNET:akok@a.com

    REV:20120828T061900Z

    END:VCARD

    Please help!

     
  • George_H
    George_H
    2012-08-28

    Hi, the error you are getting is due to a missing jar file. Cardme depends on
    the apache commons codec library. You can download it from here http://common
    s.apache.org/codec/download_codec.cgi
    It's 1 jar file, put it in your class path with Cardme and it
    should work well. This is used for decoding the QUOTED-PRINTABLE string.