首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从电子名片中获取电话号码

如何从电子名片中获取电话号码
EN

Stack Overflow用户
提问于 2012-08-24 01:49:08
回答 1查看 1K关注 0票数 2

我正在使用cardme库来处理vcards。以下是我的代码

代码语言:javascript
复制
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()的方法或类似的方法。我怎样才能得到手机号和地址号?请帮帮我!

注意:我更新了代码。在那里,你可以看到我设法弄到了电话号码。但是,这只返回家庭电话,而不返回其他任何内容。甚至连循环都没有停止。请帮帮我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-24 04:14:09

我看得出来

代码语言:javascript
复制
TelephoneFeature.getTelephone()

我还建议你看看

代码语言:javascript
复制
TelephoneFeature.getTelephoneParameterTypes()

要查看类型

更新

小心使用迭代器

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

代码语言:javascript
复制
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());

    }

}

我承认,问题(不是bug)是测试器的问题,而不是API :P

如果您添加了

代码语言:javascript
复制
Iterator<TelephoneParameterType> itNTypes = next1.getTelephoneParameterTypes();
while (itNTypes .hasNext()) {

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

}

到前面的循环,你应该会得到你想要的东西

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12097357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档