在android中以编程方式创建vCard文件

在android中以编程方式创建vCard文件,android,Android,我正在使用以下代码读取联系人并创建vcard文件 String lookupKey = cur.getString(cur.getColumnIndex(Contacts.LOOKUP_KEY)); Uri uri=Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey); try { fd =

我正在使用以下代码读取联系人并创建vcard文件

            String lookupKey = cur.getString(cur.getColumnIndex(Contacts.LOOKUP_KEY));
            Uri uri=Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);


            try {
                fd = cr.openAssetFileDescriptor(uri, "r");
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }       
            try {
                fis = fd.createInputStream();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            byte[] buf = new byte[(int)fd.getDeclaredLength()];
            try {
                if (0 < fis.read(buf))
                {
                    vCard = new String(buf);
                    writer.write(vCard);
                    writer.write("\n");
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
String lookupKey=cur.getString(cur.getColumnIndex(Contacts.LOOKUP_KEY));
Uri=Uri.withAppendedPath(ContactsContract.Contacts.CONTENT\u VCARD\u Uri,查找键);
试一试{
fd=cr.openAssetFileDescriptor(uri,“r”);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}       
试一试{
fis=fd.createInputStream();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
字节[]buf=新字节[(int)fd.getDeclaredLength()];
试一试{
如果(0
但是在浏览联系人列表时,我发现了一个错误:

错误/记忆文件(284): 在调用MemoryFile.finalize()时 阿什门还开着

我生成的.vcf文件缺少一些联系人,并且也没有正确结束


有人能告诉我我的代码有什么问题吗。

我也有同样的问题。我使用开源jar将联系人写入vcard

您需要关闭流式FI

        try {
            fis = fd.createInputStream();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        byte[] buf = new byte[(int)fd.getDeclaredLength()];
        try {
            if (0 < fis.read(buf))
            {
                vCard = new String(buf);
                writer.write(vCard);
                writer.write("\n");
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // Close stream
        fis.close();
试试看{
fis=fd.createInputStream();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
字节[]buf=新字节[(int)fd.getDeclaredLength()];
试一试{
如果(0
伙计们。有人知道如何摆脱这个错误吗???我该如何拒绝这个请求??任何人都可以向我推荐一些其他的论坛来回答这个问题吗?你能给我指一个链接,上面有你在写完所有记录后使用的jar文件的描述吗