Hallo, ich hab ein kleines Tool geschrieben, welches alle vCards, die sich im selben Ordner wie das Programm selbst befinden so manipuliert, dass vor jede Nummer eine 0 angefügt wird.
Unser Haustelefon benötigt die 0, warum auch immer
Das hat bei Homenummern einst tadellos funktioniert, jedoch wollte mein Vater unbedingt auch Handynummern editiert auf dem HT haben.
Jetzt hab ich das alles ein wenig umgeschrieben, sodass es auf die entsprechenden PhoneTypes reagiert und der Ausgabe nach auch alles korrekt editiert.
Hier mal ein Beispiel, wo und wann ein Fehler auftritt:
-vCard wird geladen
-verschachtelte for-Schleifen, die erstens die Telefonnummer suchen, zweitens den Typ ausfindig machen
-Wurde der Typ gefunden von Nr1., wird diese editiert und einer Collection hinzugefügt
usw
Wenn ich jetzt allerdings die Collection mit sämtlichen Nummern einer vCard prüfe, stelle ich fest, dass jede Nummer gleich ist, obwohl sie während des Iterierens noch korrekt manipuliert wurde.
Hier mal der Code der Methode die den Fehler beinhaltet und weiter unten eine Pseudoausgabe:
Achja, ich verwende die Lib CardMe.
wie man sieht, ist jeder Eintrag der Collection gleich.
Bitte um Hilfe^^
Unser Haustelefon benötigt die 0, warum auch immer
Das hat bei Homenummern einst tadellos funktioniert, jedoch wollte mein Vater unbedingt auch Handynummern editiert auf dem HT haben.
Jetzt hab ich das alles ein wenig umgeschrieben, sodass es auf die entsprechenden PhoneTypes reagiert und der Ausgabe nach auch alles korrekt editiert.
Hier mal ein Beispiel, wo und wann ein Fehler auftritt:
-vCard wird geladen
-verschachtelte for-Schleifen, die erstens die Telefonnummer suchen, zweitens den Typ ausfindig machen
-Wurde der Typ gefunden von Nr1., wird diese editiert und einer Collection hinzugefügt
usw
Wenn ich jetzt allerdings die Collection mit sämtlichen Nummern einer vCard prüfe, stelle ich fest, dass jede Nummer gleich ist, obwohl sie während des Iterierens noch korrekt manipuliert wurde.
Hier mal der Code der Methode die den Fehler beinhaltet und weiter unten eine Pseudoausgabe:
Achja, ich verwende die Lib CardMe.
Java:
public void changeNumbers(VCard vcard, File f) {
i=0;
Collection phoneNumbers = new LinkedList();
phoneNumbers.clear();
TelephoneFeature telephone = new TelephoneType();
vcard.setVersion(new VersionType(VCardVersion.V3_0));
modifiedvcard = vcard.clone();
NameType name = new NameType();
modifiedvcard.clearTelephoneNumbers();
for (Iterator<TelephoneFeature> tel = vcard.getTelephoneNumbers(); tel
.hasNext();) {
TelephoneFeature r = tel.next();
a=0;
i++;
for(Iterator<TelephoneParameterType> telparam = r.getTelephoneParameterTypes();telparam.hasNext();){
telephone.clearTelephoneParameterTypes();
TelephoneParameterType t = telparam.next();
telephone.clearExtendedTelephoneParameterTypes();
if(t.getType()!="VOICE"){
String changedNumber = 0 + r.getTelephone();
telephone.setTelephone(changedNumber);
telephone.addTelephoneParameterType( TelephoneParameterType.valueOf(t.getType()));
phoneNumbers.add(telephone);
System.out.println(telephone+" "+phoneNumbers.contains(telephone));
}
}
}
telephone
.setParameterTypeStyle(ParameterTypeStyle.PARAMETER_VALUE_LIST);
modifiedvcard.addAllTelephoneNumber(phoneNumbers);
System.out.println("phoneNumbers "+phoneNumbers);
saveVCard(modifiedvcard, f);
}
Java:
Directory is not created
Beispielkontakt.vcf
info.ineighborhood.cardme.vcard.types.TelephoneType[ 8BIT,0004363636280,WORK ] true
info.ineighborhood.cardme.vcard.types.TelephoneType[ 8BIT,00043602488311,HOME ] true
info.ineighborhood.cardme.vcard.types.TelephoneType[ 8BIT,000491731087,CELL ] true
phoneNumbers [info.ineighborhood.cardme.vcard.types.TelephoneType[ 8BIT,000491731087], info.ineighborhood.cardme.vcard.types.TelephoneType[ 8BIT,000491731087], info.ineighborhood.cardme.vcard.types.TelephoneType[ 8BIT,000491731087]]
wie man sieht, ist jeder Eintrag der Collection gleich.
Bitte um Hilfe^^