瀏覽代碼

use input stream reader for backward compatibility

tobiasKaminsky 8 年之前
父節點
當前提交
54f8d3091c
共有 1 個文件被更改,包括 21 次插入10 次删除
  1. 21 10
      src/main/java/com/owncloud/android/services/ContactsBackupJob.java

+ 21 - 10
src/main/java/com/owncloud/android/services/ContactsBackupJob.java

@@ -30,7 +30,6 @@ import android.content.SharedPreferences;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.IBinder;
-import android.os.ParcelFileDescriptor;
 import android.provider.ContactsContract;
 import android.support.annotation.NonNull;
 import android.text.format.DateFormat;
@@ -49,9 +48,10 @@ import com.owncloud.android.operations.UploadFileOperation;
 import com.owncloud.android.ui.activity.ContactsPreferenceActivity;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Vector;
@@ -197,19 +197,30 @@ public class ContactsBackupJob extends Job {
     private String getContactFromCursor(Cursor cursor) {
         String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
         Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
-        ParcelFileDescriptor fd;
 
         String vCard = "";
         try {
-            fd = getContext().getContentResolver().openFileDescriptor(uri, "r");
-            FileInputStream fis;
-            if (fd != null) {
-                fis = new FileInputStream(fd.getFileDescriptor());
-                byte[] buf = new byte[fis.available()];
-                fis.read(buf);
-                vCard = new String(buf);
+            InputStream inputStream = getContext().getContentResolver().openInputStream(uri);
+            InputStreamReader inputStreamReader;
+            char[] buffer = new char[1024];
+            StringBuilder stringBuilder = new StringBuilder();
+
+            if (inputStream != null) {
+                inputStreamReader = new InputStreamReader(inputStream);
+
+                while (true) {
+                    int byteCount = inputStreamReader.read(buffer, 0, buffer.length);
+
+                    if (byteCount > 0) {
+                        stringBuilder.append(buffer, 0, byteCount);
+                    } else {
+                        break;
+                    }
+                }
             }
 
+            vCard = stringBuilder.toString();
+
             return vCard;
 
         } catch (IOException e) {