2010-03-31 7 views
5

I m cercando di convertire i contatti su emulatore di formato vCard usando il codice seguenteFileNotFoundException durante il tentativo di convertire i contatti vCard

AssetFileDescriptor AFD = openAssetFileDescriptor (Contacts.CONTENT_VCARD_URI, "r")

Lo stack Trace dice java.io.FileNotFoundException Nessun file al contenuto: //com.android.contacts/contacts/as_vcard

Abbiamo bisogno di allegare un file all'URI? C'è un altro modo per convertire i contatti in Vcard in Android?

+0

Spero che questa risposta vi aiuterà a: "[Get Data vCard Android da Intent] [1]" [1]: http://stackoverflow.com/questions/12659323/android -get-vCard-dati-da-intento/12771561 # 12771561 –

risposta

2

È necessario scorrere il contatto db e chiamare openAssetFileDescriptor() su ciascuno individualmente. La parte importante è che devi usare la chiave di ricerca per ogni contatto e aggiungerla al CONTENT_VCARD_URI usando il metodo URI.withAppendedPath().

1

Ho appena inciampato anche in questo. Ecco un modo per farlo. Prima lascia che l'utente scelga il suo contatto o ottenga il contattoUri in un altro modo.

Dopo aver ricevuto il contatto, si cerca la chiave di ricerca e successivamente è possibile recuperare la vcard. Ecco il codice che ho usato dopo aver ottenuto il contactUri (tipo di copia incolla da diverse funzioni, ma dovrebbe funzionare).

Cursor cursor = resolver.query(contactUri, new String[] { 
    Contacts.LOOKUP_KEY 
}, null, null, null); 
FileInputStream input = null; 

try { 
    if (cursor.moveToFirst()) { 
     return cursor.getString(0); 
    } else return; 

    AssetFileDescriptor afd = context.getContentResolver().openAssetFileDescriptor(
      Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey), "r"); 
    input = afd.createInputStream(); 

    int ch; 
    StringBuffer strContent = new StringBuffer(""); 
    while ((ch = input.read()) != -1) 
     strContent.append((char) ch); 

    Log.d(TAG, strContent.toString()); 
} finally { 
    cursor.close(); 
    if (input != null) { 
     input.close(); 
    } 
} 
Problemi correlati