2012-09-26 13 views
6

Tôi gặp sự cố khi nhận Danh bạ từ Danh sách liên hệ của tôi. Tôi đang sử dụng mã này:Đọc thông tin của Liên hệ bằng cách sử dụng Trình mô tả tệp trong android

final Cursor Contact = cResolver.query(ContactsContract.Contacts.CONTENT_URI, null, 
       ContactsContract.Contacts._ID +" = " + Contact_ID, null,null); 
     Contact.moveToFirst(); 
     String lookupKey = Contact.getString(Contact 
       .getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 

     Uri uri = Uri.withAppendedPath(
       ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey); 

     AssetFileDescriptor fd = null; 
     FileInputStream fis = null; 

     fd = cResolver.openAssetFileDescriptor(uri, "_ID"); 
     fis = fd.createInputStream(); 
     byte[] buf = new byte[(int) fd.getDeclaredLength()]; 
     fis.read(buf); 
     String vcardstring = new String(buf); 

Nhưng tôi nhận được Exception:

java.io.IOException: read failed: EINVAL (Invalid argument) 
libcore.io.IoBridge.read(IoBridge.java:432) 

Bất kỳ một thể giúp tôi với điều này?

+0

bạn có thể gửi toàn bộ stack trace? –

+0

Xin chào AnasBakez, tôi cũng đang đối mặt với cùng một vấn đề. Nếu bạn có giải pháp thì hãy chia sẻ nó. –

+0

@abhishekkumargupta nếu bạn vẫn không tìm được giải pháp, giải pháp không sử dụng bộ mô tả tập tin, vì tôi đã gặp phải một số vấn đề khi sử dụng nó, một số thiết bị/nhà sản xuất không sử dụng nó để tôi có được tất cả thông tin tôi muốn từ nội dung nhà cung cấp theo cách thủ công. tôi mong nó sẽ có ích – AnasBakez

Trả lời

0

Bạn có thể thử lấy toàn bộ dòng và lưu nó trong một danh sách String, một ví dụ:

public List<String> getAnswers(int line) { 
    List<String> answerList = new ArrayList<String>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_GERAL; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    cursor.moveToPosition(line); 

    for(int x=0; x<cursor.getColumnCount();x++){ 
     answerList.add(cursor.getString(x)); 
    } 

    return answerList; 
}