2015-10-14 72 views
1

在我的應用程序中,用戶可以選擇一張圖片,保存在內部存儲器中。Android - 由Google Drive/Photo保存圖片不起作用

如果我選擇在內部存儲器中的圖像,我的代碼可以正常工作,但是如果我選擇雲(Drive或Photo)上的圖像,它不起作用,並且會保存0bit圖像。

代碼在一個片段中。

這是我的代碼的一部分:

首先,我選擇用

     Intent i = new Intent(
           Intent.ACTION_PICK, 
           android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

         startActivityForResult(i, 1); 

的圖像,然後,我保存的圖像與

 Uri selectedImage = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = getContext().getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
     cursor.moveToFirst(); 
     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     Bitmap imageSelect = BitmapFactory.decodeFile(picturePath); 
     cursor.close(); 
     ContextWrapper cw = new ContextWrapper(getContext()); 
     File directory = cw.getDir("images",Context.MODE_PRIVATE); 
     File myPath = new File(directory,"defaultwallpaper.jpg"); 
     FileOutputStream fos = null; 
     try { 
      fos = new FileOutputStream(myPath); 
      imageSelect.compress(Bitmap.CompressFormat.PNG, 100, fos); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     }finally { 
      try{ 
       if (fos!=null){ 
        fos.close(); 
       } 
      }catch (IOException e){ 
       e.printStackTrace(); 
      } 
     } 

我有這樣的錯誤:

E/BitmapFactory: Unable to decode stream: java.lang.NullPointerException: Attempt to invoke virtual method 'char[] java.lang.String.toCharArray()' on a null object reference 
W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference 

回答

0

我解決了它b y改變代碼,它適用於我的Nexus 5與Android 6:

Uri uri = data.getData(); 
/*String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
Cursor cursor = getContext().getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
assert cursor != null; 
cursor.moveToFirst(); 
int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
String picturePath = cursor.getString(columnIndex); 
imageSelect = BitmapFactory.decodeFile(picturePath); 
cursor.close();*/ 
try { 
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImage); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

你能確切地說「imageSelect」是指什麼? – mattyU

+0

@mattyU對不起,這是我的個人推薦人。這是一個位圖。 –