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.

0voto

user609395 Punkte 26

Könnten Sie fileList() versuchen? Es

gibt ein Array von Zeichenfolgen zurück, die die privaten Dateien benennen, die mit diesem Anwendungspaket des Kontexts verbunden sind.

0 Stimmen

Eigentlich habe ich dies verwendet, um zu überprüfen, ob die Datei im Logcat-Ausgabe vorhanden ist. Also die Datei ist vorhanden.

0voto

Chirag Purohit Punkte 731

Für mich habe ich das Bild von einer lokal gespeicherten URL erhalten, etwas wie "file:///storage/emulated/0/...." (Ich habe das Phonegap-Plugin verwendet, um das Bild aufzunehmen. Das Plugin hat mir den Bildpfad gegeben, den ich im nativen Code verwenden muss)

Hier ist der Code-Schnipsel, der für mich funktioniert hat.

String captured_image_info = "file:///storage/emulated/0/Android/data/com.testapp/cache/1493809796526.jpg"
Uri uri=Uri.parse(captured_image_info);
largeLog("uri", "" + uri);

InputStream imageStream = getContentResolver().openInputStream(uri);

Bitmap bm = BitmapFactory.decodeStream(imageStream);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm ist das Bitmap-Objekt

byte[] decodedBytes = baos.toByteArray();

Bitmap img_captured_image = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);

0voto

user3447220 Punkte 11

Sie müssen Laufzeitberechtigungen für Manifest.permission.READ_EXTERNAL_STORAGE einrichten. Wenn Sie dies nicht tun, erhalten Sie ein Null, ohne eine Fehlermeldung oder sogar eine Anzeige im Log zu erhalten. Beachten Sie, dass Sie die Berechtigungen sowohl im Manifest als auch zur Laufzeit anfordern müssen.

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