2012-08-23 3 views
2

저는 cardme 라이브러리를 사용하여 vcards를 처리하고 있습니다. 다음은 내 코드입니다vcard에서 전화 번호를 얻는 방법

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 전화 만 반환하며 다른 것은 반환하지 않습니다. 심지어 루프가 멈추지 않습니다. 도와주세요!

나는 또한 유형

UPDATE를 볼 수

TelephoneFeature.getTelephoneParameterTypes() 

에서 살펴 보는 게 좋을 것

TelephoneFeature.getTelephone() 

내가

이 반복자 조심 볼 수 있습니다

답변

1

vcard.getTelephoneNumbers()를 호출 할 때마다 새로운 Iterator이 생성되므로 무한 루프가 발생할 수 있습니다. 당신은 당신이 이전 루프

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

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

} 

를 추가하는 경우 P

:

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와의 (버그가 아닙니다) 당신이 찾고있는 것을 얻어야합니다.

+0

답장을 보내 주셔서 감사합니다. 이걸 확인하려면 30 분을주세요 :) –

+0

awesome! 고마워 할 말이 없어! 지금 일하고있다 !!!!! –

+0

제발 나를 도울 수 있도록 여기에 너무 도움이 http://stackoverflow.com/questions/12153852/unable-to-read-vcards-with-address –

관련 문제