Da der Datenerfassungsprozess von Firebase ein asynchroner Prozess ist, werden beim Anzeigen von Bildern und Datenbankdaten in einer bestimmten Reihenfolge wie der Twitter-Timeline die Bilder verschoben, wenn Sie sie ohne nachzudenken anzeigen, sodass die Daten rekursiv angezeigt werden. Der empfohlene Weg ist, es zu bekommen.
java.Timeline.java
public class Timeline extends AppCompatActivity{
//Liste, um die Daten der abgerufenen Datenbank abzulegen
private ArrayList<String> getDate = new ArrayList<>();
//Bildreferenz abrufen
private ArrayList<StorageReference> spaceRef = new ArrayList<>();
//DatabaseReference-Objekterstellung
private DatabaseReference mDatabase;
//FireBase-Speicher
private FirebaseStorage storage = FirebaseStorage.getInstance();
//Lager
private StorageReference storageRef = storage.getReference();
//Zählvariable
private int Count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
//Verweis auf Datenbank abrufen
mDatabase = FirebaseDatabase.getInstance().getReference();
//FireBase-Ereignisse
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//Daten, die Sie erhalten möchten
Object getObject = postSnapshot.child(/*Daten, die Sie erhalten möchten*/).getValue();
//Nullprüfung der erfassten Daten
if(getObject != null) {
//In Liste speichern
getDate.add(getObject .toString());
//Bildreferenz abrufen
spaceRef.add(storageRef.child(/*Referenzbild*/));
//Verarbeitung des Bildes, zu dem Sie gehen möchten
getPhoto();
}
}
}
//Bildaufnahme
private void getPhoto() {
int Listsize = spaceRef.size();
//Vermeiden Sie es, von der Liste wegzuschauen
if(Count < Listsize) {
final long ONE_MEGABYTE = 1024 * 1024;
//Speicherereignis
spaceRef.get(Count).getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
//Holen Sie sich ein Miniaturbild
Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
/*Fügen Sie den Prozess zur Listenansicht hinzu*/
Count++;
getPhoto();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
}
});
}
}
Ich habe bereits die ursprüngliche Listenansicht erstellt und sie für diejenigen geschrieben, die noch einen Schritt weiter stolpern. Daher ist dies durchaus angemessen (ich denke, dass die tatsächlich verwendete Verarbeitung nicht hilfreich ist), aber vorerst habe ich es geschafft .. Da es sich um Java handelt, denke ich persönlich, dass es besser ist, eine solide Nullprüfung durchzuführen. Mein Freund hat es auf Github veröffentlicht, also werde ich hier einen Link setzen. StutdentTimeline.java und TeacherStudent.java verwenden diese Methode tatsächlich. https://github.com/wasabimochi/ivycon Wenn ich Lust dazu habe, schreibe ich es ordentlich und poste es (das sage ich nicht). Bitte kommentieren Sie, wenn Sie Fragen haben. wir sehen uns.