2016-11-11 18 views
1
は、私はプロGIGASET N520-IP

のJavaの問題

でそれを使用するためには、単一のマルチvCardのにアドレス帳をエクスポートしようとしている

良い日が続いている

はBEGIN:VCARD
VERSION:2.1
N:私はGIGASET Handphoneに作成され、WebGUIのエクスポート機能とそれをエクスポート例エントリ、ボブ; Bobbington
TEL; HOME:00412345689
TEL; WORK :00419876543
TEL; CELL:004112345432
END:VCARD

BEGIN:VCARD
VERSION:2.1
N:NotBobと、NotBobbington
TEL; HOME:00412345689
TEL; WORK:00419876543
TEL; CELL:004112345432
END :VCARD

はBEGIN:VCARDを....

私はインポートするために必要な特定のvCardを生成するためのテンプレートとしてこれを使用しますが、私はそれをインポートしようとするたびに、それはOありませんたとえそこに20のエントリがあっても、vcard全体を1人のPersonとして受け入れることができます。

私のエントリは次のようになります。

はBEGIN:VCARD
VERSION:2.1
N:マックス; Mustermann
TEL; HOME:00411234578
TEL; WORK:00411234567
TEL; CELL:00411234590
END:VCARD

はBEGIN:VCARD
VERSION:2.1
N:MHUEUExを、MusterHEHEmann
TEL; HOME:00411234578
TEL; WO RK:00411234567
TEL; CELL:00411234590
END:VCARD

私は私、およびエクスポートされたvCardの間の視覚的な違いを見ることができません。

私のエントリを他のvcardにコピーすると、すぐに動作しなくなります。

しかし、私が作業中のvcard内の既存のエントリを複製すると、vcardは引き続き動作します。

ファイル全体にいくつかのKind of Encodingの問題があると思います。

また、VCard Wiki Siteで私の間違いをチェックし、いくつか修正しました。

私が試み:
は、ASCIIにVCARD文字列を減らす00
と数字に+を置換一時(数字を除く)のみアルファベットのすべての文字列(-Z & & A-Z)
をSafeCharing。
異なる行セパレータ( "\ n、\ r \ n"、System。lineSeparator())

システムデータ:
OS:
のJava-版)(最終CentOSに6.8:1.8.0_102-B14(x64)の今

は、ここに私の実際のコードです:

//Code for Address book fetching would be here 
     log.debug("Received : " + Addressbook.size()); 

    File ExportFile = new File(ExportFilePath); 

    if(ExportFile.exists()) 
    { 
     ExportFile.delete(); 
    } 
    ExportFile.createNewFile(); 

    log.debug("Writing VCards to File: " + ExportFile.getAbsolutePath()); 

    FileWriter FW = new FileWriter(ExportFile); 

    Map<String, DataEntry> Properties = null; 

    String homephone=""; 
    String phone=""; 
    String mobile=""; 
    String firstname=""; 
    String lastname=""; 

    StringBuilder SB = null; 
    String Fix=""; 

    for(AddressbookContact AC : Addressbook) 
    { 
     log.debug("Writing: " + AC.getName()); 
     Properties = AC.getContactProperties(); 

     SB = new StringBuilder(); 

     SB.append("BEGIN:VCARD"); 
     SB.append(System.lineSeparator()); 
     SB.append("VERSION:2.1"); 
     SB.append(System.lineSeparator()); 

     firstname=NameFilter(AC.getFirstname()); 
     lastname=NameFilter(AC.getFamilyname()); 

     SB.append("N:"+firstname+";"+lastname); 
     SB.append(System.lineSeparator()); 

     homephone= Properties.get("homephone").getValue(); 
     log.debug("Homephone: " + homephone); 

     if(homephone.startsWith("+")) //Test only, to exlucde existing + as an errorsource 
     { 
      //TODO: If + was source of error, write proper regex replace function 
      homephone="00"+homephone.substring(1, homephone.length()); 
     } 
     log.debug("Filtered: " + homephone); 

     phone = Properties.get("phone").getValue(); 
     log.debug("Phone: " + phone); 

     if(phone.startsWith("+")) 
     { 
      phone="00"+phone.substring(1, phone.length()); 
     } 

     log.debug("Filtered: " +phone); 

     mobile= Properties.get("mobile").getValue(); 
     log.debug("Mobile: " + mobile); 


     if(mobile.startsWith("+")) 
     { 
      mobile ="00"+mobile.substring(1, mobile.length()); 
     } 

     log.debug("Filtered: " + mobile); 

     if(!homephone.isEmpty()) 
     { 
      SB.append("TEL;HOME:"+homephone); 
      SB.append(System.lineSeparator()); 
     } 

     if(!phone.isEmpty()) 
     { 
      SB.append("TEL;WORK:"+phone); 
      SB.append(System.lineSeparator()); 
     } 

     if(!mobile.isEmpty()) 
     { 

      SB.append("TEL;CELL:"+mobile); 
      SB.append(System.lineSeparator()); 
     } 

     SB.append("END:VCARD"); 
     SB.append(System.lineSeparator()); 
     SB.append(System.lineSeparator()); 
     Fix = SB.toString(); 
     Fix = Fix.replaceAll("[^\\u0000-\\uFFFF]", ""); //ASCII only 
     FW.write(Fix); 
    } 

    log.debug("Done!"); 

    FW.close(); 
} 

String NameFilter(String Entry) 
{ 
    String safeChar="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYZ"; 
    char[] allowed = safeChar.toCharArray(); 
    char[] charArray = Entry.toCharArray(); 
    StringBuilder Result = new StringBuilder(); 
    for (char c : charArray) 
    { 
     for (char a : allowed) 
     { 
      if(c==a) Result.append(a); 
     } 
    } 
    return Result.toString(); 
} 

どうすればこのような問題をデバッグできますか?

シンセサイザーFabian95qw

答えて

0

私が見られるように、vCardのエクスポートをそれを考え出したので、私はezvcardを使用してmultivcardを生成しようとした実際のvCardバージョン2.1

に準拠していませんでした。完全なvcardバージョン2.1準拠のマルチカードが機能します。

log.debug("Writing VCards to File: " + ExportFile.getAbsolutePath()); 
    FileWriter FW = new FileWriter(ExportFile); 
    VCardWriter VCW = new VCardWriter(FW, VCardVersion.V2_1); 
    VCard VC = null; 
    StructuredName SN = null; 
    Telephone T = null; 


    Map<String, DataEntry> Properties = null; 

    String homephone=""; 
    String phone=""; 
    String mobile=""; 
    String firstname=""; 
    String lastname="";  

    for(AddressbookContact AC : Addressbook) 
    { 
     log.debug("Writing: " + AC.getName()); 
     Properties = AC.getContactProperties(); 

     firstname=NameFilter(AC.getFirstname()); 
     lastname=NameFilter(AC.getFamilyname()); 

     if(firstname.isEmpty() && lastname.isEmpty()) 
     { 
      firstname = AC.getCompany(); 
     } 

     VC = new VCard(); 
     SN = new StructuredName(); 

     SN.setFamily(lastname); 
     SN.setGiven(firstname); 

     VC.setStructuredName(SN); 

     homephone= Properties.get("homephone").getValue();  
     phone = Properties.get("phone").getValue(); 
     mobile= Properties.get("mobile").getValue(); 


     if(!homephone.isEmpty()) 
     { 

      T = new Telephone(homephone); 
      T.addType(TelephoneType.HOME); 
      VC.addTelephoneNumber(T); 
     } 

     if(!phone.isEmpty()) 
     { 
      T = new Telephone(phone); 
      T.addType(TelephoneType.WORK); 
      VC.addTelephoneNumber(T); 
     } 

     if(!mobile.isEmpty()) 
     { 

      T = new Telephone(mobile); 
      T.addType(TelephoneType.CELL); 
      VC.addTelephoneNumber(T); 
     } 

     VCW.write(VC); 
    } 
VCW.close(); 

vCardファイルは、次のようになります。

はBEGIN:VCARD
VERSION:2.1
N:Testinator; Testinatorを;;;
TEL; WORK:101
X-PRODID:ezvcard 0.9.0
END:VCARD
はBEGIN:VCARD
VERSION:2.1
N:管理者、テスト;;;
TEL; WORK:100
X-PRODID:ezvcard 0.9.0
END:VCARD

〜問題が解決

Sincerly

Fabian95qw

0

vCardの間の空白行を削除します。