2016-10-03 3 views
0

問題はAndroid 7.0で連絡先を共有しようとすると、アプリケーションがクラッシュする問題です。Android 7.0で連絡先を共有

final ContentResolver resolver = context.getContentResolver(); 

      cursor = resolver.query(contactsUri, null, null, null, null); 
      String name = ""; 
      String contactLookupKey = ""; 
      if (cursor != null && cursor.moveToFirst()) { 
       name = cursor.getString(cursor.getColumnIndexOrThrow(
         ContactsContract.Contacts.DISPLAY_NAME)); 
       contactLookupKey = cursor.getString(cursor.getColumnIndexOrThrow(
         ContactsContract.Contacts.LOOKUP_KEY)); 
      } 

      name = name.replaceAll("[^0-9a-zA-Z]", "_"); 
      name = name + "_" + CONTACT_PREFIX; 
      Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, 
        contactLookupKey); 

      File storageDir = new File(Environment.getExternalStorageDirectory(), "contacts"); 
      if (!storageDir.exists()) { 
       storageDir.mkdir(); 
      } 
      File vCardFile = File.createTempFile(name, ".vcf", storageDir); 

      if (!vCardFile.exists()) { 
       vCardFile.createNewFile(); 
      } 
      fileOutputStream = new FileOutputStream(vCardFile); 

      AssetFileDescriptor 
        fd = resolver.openAssetFileDescriptor(uri, "r"); 

      fis = fd.createInputStream(); 

      final byte[] buf = new byte[(int) fd.getDeclaredLength()]; 

fd.getDeclaredLength() - return "-1" and app crash? 

何か問題がありますか?

+0

作品。 デバッガでfdオブジェクトを開いたときに問題が発生しないため、その長さは-1です... contactは空です。問題は.openAssetFileDescriptor(uri、 "r")にあります。 – JRdev

答えて

1

ソリューション/ 代わり:

final byte[] buf = new byte[(int) fd.getDeclaredLength()]; 

使用: 最後のバイト[] BUF =新しいバイト[1024]と

byte[] buf; 

if (fd.getDeclaredLength() != AssetFileDescriptor.UNKNOWN_LENGTH) { 
    buf = new byte[(int) fd.getDeclaredLength()]; 
} else { 
    buf = new byte[fis.available()]; 
} 
fis.read(buf);