Ich bin auf der Suche nach einer Möglichkeit zum Herunterladen von Dateien aus meinem FirebaseStorage, indem Sie den Pfad an eine statische Funktion übergeben, die Byte-Daten zurückgibt. Ich habe so etwas wie dies versucht, eine Bitmap zu erhalten:Erstellen einer statischen Funktion, die StorageReference-Bytes zurückgibt
public static Bitmap getBitmapFromStringPath(String path)
{
final Bitmap[] bitmap = new Bitmap[1];
StorageReference storage = FirebaseStorage.getInstance().getReference(path);
storage.getBytes(1024 * 1024).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
bitmap[0] = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
});
return bitmap[0];
}
Natürlich ist dies nicht funktioniert wie erwartet (alle Erträge sind null), da Firebase ein Echtzeit-Dienst ist, aber ich bin sicher, es gibt einige Workarounds erreiche was ich suche. Ich brauche etwas Einfaches und Einfaches.
ich mich verändert habe, dass das Image stattdessen zu aktualisieren und sieht gut aus. Ich habe auch versucht, Tasks.await() zu tun, aber es ist fehlgeschlagen. Es macht mir nichts aus, den UI-Thread überhaupt zu blockieren. Was können Sie dazu vorschlagen? –
Sie können den UI-Thread nicht blockieren, aber Ihre Benutzer werden es tun. Deshalb erkennt Android dies und zeigt den Dialog "Anwendung reagiert nicht". Eine separate Antwort hierzu (unter Verwendung der Echtzeitdatenbank, aber auch für Cloud Storage) finden Sie unter: https://stackoverflow.com/questions/33203379/setting-singleton-property-value-in-firebase-listener –
I Ich habe versucht, viele von denen warten, semaphore und Countdown ohne Glück. Ich habe es geschafft, die Daten mit einem HTTP-GET-Aufruf zu bekommen, aber das wird mir nicht helfen mit dem im Gerät zwischengespeicherten Firebase-Daten :( Ich werde aufgeben .... aber es sollte in Zukunft Art von synchronen Operationen sein .. danke für Ihre Hilfe Frank –