2010-03-31 11 views
5

i M intentar convertir los contactos en emulador para formato vCard con el siguiente códigoFileNotFoundException mientras trata de convertir los contactos de vCard

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

La pila Trace dice java.io.FileNotFoundException Ningún archivo en el contenido: //com.android.contacts/contacts/as_vcard

¿Necesitamos adjuntar un archivo al URI? ¿Hay alguna otra forma de convertir Contactos a Vcard en Android?

+0

Espero que esta respuesta le ayudará a: "[Obtener datos vCard Android de Intención] [1]" [1]: http://stackoverflow.com/questions/12659323/android -get-vcard-data-from-intent/12771561 # 12771561 –

Respuesta

2

Tiene que iterar a través del contacto db y llamar a openAssetFileDescriptor() en cada uno individualmente. La parte importante es que debe usar la clave de búsqueda para cada contacto y anexarla a CONTENT_VCARD_URI utilizando el método URI.withAppendedPath().

1

Acabo de tropezar con este también. Aquí hay una manera de hacerlo. Primero deje que el usuario elija su contacto u obtenga el contacto de otra manera.

Después de tener el contactoUri, busca el lookup_key y luego puede recuperar la vcard. Aquí está el código que utilicé después de obtener el contactUri (tipo de copia pegar desde diferentes funciones, pero debería funcionar).

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(); 
    } 
} 
Cuestiones relacionadas