21 Stimmen

Android: decodeFile gibt immer null für Datei im internen Speicher zurück

Ich habe eine Datei lokal im privaten Speicher der Anwendung gespeichert. Ich habe überprüft, dass sie existiert, aber immer wenn ich BitmapFactory.decodeFile aufrufe, gibt es immer null zurück.

Wenn ich die Datei als Ressource speichere und ImageView.setImageResource verwende, wird sie immer korrekt angezeigt.

Was ist das Problem?

Hier ist der Auszug:

filename = "test.png";

if (doesFileExist(filename))
    Bitmap bMap = BitmapFactory.decodeFile(filename);

Ich habe auch versucht:

Bitmap bMap = BitmapFactory.decodeFile(getFilesDir().getPath()
                    + filename);

0 Stimmen

Im decodeFile() müssen Sie den vollständigen Pfad der Datei übergeben, nicht nur den Namen oder nicht auf die Weise, wie Sie es versuchen.

33voto

Jahmic Punkte 10477

Diese Frage wurde bereits beantwortet, zum Beispiel hier: BitmapFactory.decodeFile returns null even image exists

Genau das habe ich gebraucht:

String fname=new File(getFilesDir(), "test.png").getAbsolutePath();

9 Stimmen

Du SOLLTEST deine eigene Frage beantworten. Ich bin auf diese Frage mit dem gleichen Problem gestoßen und habe die Lösung von dir bekommen. Die Frage, auf die du als Antwort verweist, war auch nicht in meiner ursprünglichen Suche. Prost!

5voto

rharvey Punkte 1947

Statt BitmapFactory.decodeFile zu verwenden, versuchen Sie es mit InputStream:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    if(resultCode == RESULT_OK){          
        Uri selectedImage = imageReturnedIntent.getData();
        InputStream imageStream = getContentResolver().openInputStream(selectedImage);
        Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);

3voto

Barmaley Punkte 16398

Leute, Dateien, die in der App-Ressource gespeichert sind, sollten auf besondere Weise referenziert werden. Wenn die Datei zum Beispiel im Ordner "assets" liegt und als "myfile.png" benannt ist, muss sie wie folgt referenziert werden:

String uriString="file:///android_asset/myfile.png";
Uri uri=Uri.parse(uriString);

0 Stimmen

Gute Informationen zu wissen, aber in diesem Fall wird die Datei in den privaten Speicher der App heruntergeladen und nicht in die Ressourcen.

3voto

Maverick Meerkat Punkte 4734

BitmapFactory.decodeFile erwartet einen Dateipfad ohne Schema. Das heißt, ohne das file:// am Anfang.

Wenn Sie mit einem Uri umgehen, rufen Sie nicht einfach .toString() auf, sondern rufen Sie stattdessen .getPath() auf und übergeben Sie dies an die Methode.

1voto

Eng.OsamaYousef Punkte 389

Nachdem Sie die erforderlichen Berechtigungen (READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE) hinzugefügt haben

Sie müssen diese Zeile zu Manifesten hinzufügen: android:requestLegacyExternalStorage="true"

Bildbeschreibung hier eingeben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X