2016-08-29 4 views
1

Ich versuche, ein Bild durch den Benutzer ausgewählt, um zu meinem Webserver durch POST-Anfrage zu gehen. Also muss ich mein Bild in Base64 kodieren, aber ich habe ein Problem, dann ist es, dass logcat eine FileNotFoundException zurückgibt, die ich nicht verstehe:java.io.FileNotFoundException auch wenn imageView das Bild anzeigen kann

Unable to decode stream: java.io.FileNotFoundException 

Hier ist meine 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()); 
     } 


    } 
} 

und hier ist mein Manifest :

<?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> 

Und ich habe eine Funktion `

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 
     ); 
    } 
} 

ich bin verzweifelt seit vor 4 Tagen ...

+0

'Cursor cursor' und' String picturePath'. Sie verwenden nicht picturePath. Was gut ist. Also entferne bitte den ganzen Code. – greenapps

+0

Danke, aber es beantwortet meine Frage nicht: p – Orionss

+0

Natürlich nicht. Das musst du nicht sagen. Sie sollten zunächst sauberen Code posten. – greenapps

Antwort

1

fand ich was falsch gelaufen ist (natürlich habe ich ein anderes Problem dann aber x)) Also das Problem, dass ich verwendet

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

aber ich habe schon:

final Uri selectedImage = data.getData(); 

aber man kann nicht die Daten zweimal bekommen, so habe ich gerade:

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

und es ging gut!

Verwandte Themen