2017-11-08 2 views
2

vCard 문자열을 가져 왔지만 버전 2.1에 있습니다. 문제는 현재 API에 vCard 3.0이 필요하다는 것입니다. 대상에 쉽게 접근 할 수 있습니까? 또는 문자열을 수동으로 편집해야합니까? vCard 3.0을 내보내려면 어떻게해야합니까?

내 코드 :

private void getVcardString() { 
    // TODO: 07.11.2017 Fix vCard Version 
    vCardArray = new ArrayList<>(); 
    cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
      null, null, null); 
    if (cursor != null && cursor.getCount() > 0) { 
     cursor.moveToFirst(); 
     for (int i = 0; i < cursor.getCount(); i++) { 

      String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 
      Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey); 
      AssetFileDescriptor fd; 
      try { 
       fd = this.getContentResolver().openAssetFileDescriptor(uri, "r"); 
       FileInputStream fis = fd.createInputStream(); 
       byte[] buf = new byte[(int) fd.getDeclaredLength()]; 
       fis.read(buf); 
       String vCard = new String(buf); 
       vCardArray.add(vCard); 
       Log.println(Log.ASSERT, "Vcard", vCard); 
      } catch (Exception e1) { 
       e1.printStackTrace(); 
      } 
      cursor.moveToNext(); 
     } 

    } else { 
     Log.d("vCardERROR", "No Contacts in Your Phone"); 
    } 

} 

답변

0

vCard를 3.0 문자 집합, 예를 포함하는 MIME 형식을 필요로 Content-Type: text/vcard; charset=ISO-8859-1

설정하십시오! 도움이 될 수도 있습니다

+0

API가 JSON과 함께 작동하므로 기본적으로 Base64로 컬렉션의 toString을 인코딩하고 JSONObject에 넣은 다음 API로 보냅니다. 따라서 Content-Type은 application/json이어야합니다. – alisheikh

관련 문제