2012-08-23 95 views
2

我正在使用cardme库处理电子名片。以下是我的代码如何从电子名片中获取电话号码

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.EmailFeature; 
import net.sourceforge.cardme.vcard.features.NameFeature; 
import net.sourceforge.cardme.vcard.features.NicknameFeature; 
import net.sourceforge.cardme.vcard.features.TelephoneFeature; 
import net.sourceforge.cardme.vcard.types.parameters.TelephoneParameterType; 

public class VCardTest 
{ 

    public static void main(String[] args) 
    { 
     File vcardFile = new File("C:/Users/yohan/Contacts/Yohan Weerasinghe.vcf"); 
     VCardEngine vcardEngine = new VCardEngine(); 
     try 
     { 
      VCard vcard = vcardEngine.parse(vcardFile); 
      String name = vcard.getName().getGivenName(); 

      EmailFeature email = vcard.getEmails().next(); 
      String sEmail = email.getEmail(); 

      NicknameFeature nickName = vcard.getNicknames(); 
      Iterator<String> nicknames = nickName.getNicknames(); 
      String sNickName = nicknames.next(); 

      Iterator<TelephoneFeature> telephoneNumbers = vcard.getTelephoneNumbers(); 
      TelephoneFeature next = telephoneNumbers.next(); 

      String telephone = ""; 


       while(vcard.getTelephoneNumbers().hasNext()) 
       { 
        TelephoneFeature next1 = vcard.getTelephoneNumbers().next(); 
        telephone = next1.getTelephone(); 



        System.out.println(telephone); 
       } 



      Iterator<TelephoneParameterType> telephoneParameterTypes = next.getTelephoneParameterTypes(); 
      TelephoneParameterType next1 = telephoneParameterTypes.next(); 
      String type = next1.getType(); 

      TelephoneParameterType next2 = telephoneParameterTypes.next(); 
      String type2 = next2.getType(); 


      System.out.println(name); 
      System.out.println(sEmail); 
      System.out.println(sNickName); 

      System.out.println(type); 
      System.out.println(type2); 


     } catch (IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 

但是,没有方法称为getNumber()或其他。我怎样才能获得手机号码和号码?请帮忙!

注:我更新了代码。在那里,你可以看到我设法得到电话号码。但是,这仅返回HOME电话而不是其他任何内容。即使循环不停止。请帮忙!

回答

1

我可以看到

TelephoneFeature.getTelephone() 

我也建议考虑看看

TelephoneFeature.getTelephoneParameterTypes() 

看到类型

UPDATE

小心迭代器

每次调用vcard.getTelephoneNumbers()都会创建一个新的Iterator,这意味着您可能会以无限循环结束。

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

    TelephoneFeature next1 = itNumbers.next(); 
    String telephone = next1.getTelephone(); 

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

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

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

    } 

} 

我认错,这个问题(是不是一个错误),它与测试,而不是API是:P

如果添加

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

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

} 

以前的循环中,应该得到你要找的东西

+0

感谢您的回复。给我30分钟检查一下:) –

+0

真棒!没有话要谢谢你!它正在工作!!!!! –

+0

请客气一点,以帮助我在这里http://stackoverflow.com/questions/12153852/unable-to-read-vcards-with-address –