2016-08-29 44 views
1

我想讓用戶選擇的圖片通過POST請求轉到我的Web服務器。所以,我需要編碼我爲Base64知情同意,但我有一個問題,那就是logcat的返回,我不明白一個FileNotFoundException異常:java.io.FileNotFoundException即使imageView可以顯示圖片

Unable to decode stream: java.io.FileNotFoundException 

這裏是我的onActivityResult:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 

     final Uri selectedImage = data.getData(); 
     String[] filePathColumn = {MediaStore.Images.Media.DATA}; 
     Log.d("Toast", filePathColumn[1]); 
     Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
     cursor.moveToFirst(); 
     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     cursor.close(); 
     imgViewScan.setImageURI(selectedImage); 
     try 
     { 
      InputStream stream = getContentResolver().openInputStream(
        data.getData()); 
      Bitmap bm = BitmapFactory.decodeStream(stream); 
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
      //Bitmap bm = BitmapFactory.decodeFile(selectedImage.toString(),options); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object 
      byte[] b = baos.toByteArray(); 
      String encodedImage = Base64.encodeToString(b, Base64.DEFAULT); 
      new EnvoiPhotoTask().execute(encodedImage); 
     } catch(IOException e) 
     { 
      Log.e("ScanAc", e.toString()); 
     } 


    } 
} 

,這裏是我的清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.partenaires.legimetrie.legimetrieapp"> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".InscriptionActivity" /> 
    <activity android:name=".ConnexionActivity" /> 
    <activity android:name=".ServicesActivity" /> 
    <activity android:name=".InterventionRapideActivity" /> 
    <activity android:name=".InterventionDetailleeActivity" /> 
    <activity android:name=".ScanActivity" /> 
    <activity android:name=".ContactActivity"></activity> 
</application> 

而且我有一個函數`

public static void verifyStoragePermissions(Activity activity) { 
    // Check if we have write permission 
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

    if (permission != PackageManager.PERMISSION_GRANTED) { 
     // We don't have permission so prompt the user 
     ActivityCompat.requestPermissions(
       activity, 
       PERMISSIONS_STORAGE, 
       REQUEST_EXTERNAL_STORAGE 
     ); 
    } 
} 

我是因爲3天前絕望......

+0

'光標遊標'和'String picturePath'。你沒有使用picturePath。這很好。所以請刪除所有的代碼。 – greenapps

+0

謝謝,但它不回答我的問題:p – Orionss

+0

當然不是。你不必說出來。你應該發佈乾淨的代碼開始。 – greenapps

回答

1

我發現了什麼問題(很明顯,我有另外一個問題,然後,但X)) 所以,我用

InputStream stream = getContentResolver().openInputStream(
       data.getData()); 
問題

,但我已經做了:

final Uri selectedImage = data.getData(); 

,但你不能得到DATAS兩次,所以我只是做:

InputStream stream = getContentResolver().openInputStream(
       selectedImage); 

它很好!