Java 如何从vcard获取电话号码
我正在使用cardme库处理vcards。下面是我的代码Java 如何从vcard获取电话号码,java,mobile,netbeans,io,libraries,Java,Mobile,Netbeans,Io,Libraries,我正在使用cardme库处理vcards。下面是我的代码 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
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();
}
}
}
package-vcardtest;
导入java.io.*;
导入java.util.Iterator;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入net.sourceforge.cardme.engine.VCardEngine;
导入net.sourceforge.cardme.vcard.vcard;
导入net.sourceforge.cardme.vcard.features.EmailFeature;
导入net.sourceforge.cardme.vcard.features.NameFeature;
导入net.sourceforge.cardme.vcard.features.昵称功能;
导入net.sourceforge.cardme.vcard.features.TelephoneFeature;
导入net.sourceforge.cardme.vcard.types.parameters.TelephoneParameterType;
公共类VCardTest
{
公共静态void main(字符串[]args)
{
File vcardFile=新文件(“C:/Users/yohan/Contacts/yohan Weerasinghe.vcf”);
VCardEngine VCardEngine=新VCardEngine();
尝试
{
VCard VCard=vcardEngine.parse(vcardFile);
字符串名称=vcard.getName().getGivenName();
EmailFeature email=vcard.getEmails().next();
字符串sEmail=email.getEmail();
昵称功能昵称=vcard.Get昵称();
迭代器昵称=昵称.get昵称();
String sNickName=昵称.next();
迭代器telephoneNumbers=vcard.getTelephoneNumbers();
电话功能next=电话号码。next();
字符串电话=”;
while(vcard.getTelephoneNumbers().hasNext())
{
电话功能next1=vcard.getTelephoneNumbers().next();
telephone=next1.getTelephone();
系统输出打印(电话);
}
迭代器telephoneParameterTypes=next.getTelephoneParameterTypes();
TelephoneParameterType next1=telephoneParameterTypes.next();
字符串类型=next1.getType();
TelephoneParameterType next2=telephoneParameterTypes.next();
字符串类型2=next2.getType();
System.out.println(名称);
System.out.println(sEmail);
System.out.println(sNickName);
系统输出打印项次(类型);
系统输出打印项次(类型2);
}捕获(IOEX异常)
{
例如printStackTrace();
}
}
}
但是,没有名为getNumber()或其他方法。我怎样才能得到手机号码和陆地号码?请帮忙
注意:我更新了代码。在那里,你可以看到我设法得到了电话号码。但是,这只返回家庭电话,而不返回其他任何内容。甚至循环也没有停止。请帮忙 我看得出来
TelephoneFeature.getTelephone()
我还建议你看看
TelephoneFeature.getTelephoneParameterTypes()
查看类型
更新
小心迭代器
每次调用vcard.getTelephoneNumbers()都会创建一个新的迭代器
,这意味着您可能会陷入无限循环
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());
}
}
Iterator itNumbers=vcard.getTelephoneNumbers();
while(itNumbers.hasNext()){
电话功能next1=itNumbers.next();
String telephone=next1.getTelephone();
系统输出打印(电话);
System.out.println(“types=“+next1.getExtendedTelephoneParameterSize());
迭代器itTypes=next1.getExtendedTelephoneParameterTypes();
while(itTypes.hasNext()){
XTelephoneParameterType next=itTypes.next();
System.out.println(“-”+next.getType()+“/”+next.getDescription());
}
}
我得到了纠正,问题(不是bug)在于测试人员,而不是API:p
如果你加上
Iterator<TelephoneParameterType> itNTypes = next1.getTelephoneParameterTypes();
while (itNTypes .hasNext()) {
TelephoneParameterType next = itNTypes .next();
System.out.println(" - " + next.getType() + " / " + next.getDescription());
}
Iterator itNTypes=next1.getTelephoneParameterTypes();
while(itNTypes.hasNext()){
电话参数类型next=itNTypes.next();
System.out.println(“-”+next.getType()+“/”+next.getDescription());
}
对于上一个循环,您应该得到您想要的谢谢您的回复。给我30分钟检查一下:)请在这里也帮我一下