Étant donné que le processus d'acquisition de données de Firebase est un processus asynchrone, lors de l'affichage d'images et de données de base de données dans un ordre spécifique comme la chronologie Twitter, si vous les affichez sans réfléchir, les images se déplaceront, de sorte que les données seront affichées de manière récursive. La méthode recommandée est de l'obtenir.
java.Timeline.java
public class Timeline extends AppCompatActivity{
//Liste pour mettre les données de la base de données récupérée
private ArrayList<String> getDate = new ArrayList<>();
//Obtenir une référence d'image
private ArrayList<StorageReference> spaceRef = new ArrayList<>();
//Création d'objet DatabaseReference
private DatabaseReference mDatabase;
//Stockage FireBase
private FirebaseStorage storage = FirebaseStorage.getInstance();
//espace de rangement
private StorageReference storageRef = storage.getReference();
//Variable de comptage
private int Count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
//Obtenir une référence à la base de données
mDatabase = FirebaseDatabase.getInstance().getReference();
//Événements FireBase
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//Les données que vous souhaitez obtenir
Object getObject = postSnapshot.child(/*Les données que vous souhaitez obtenir*/).getValue();
//Null contrôle des données acquises
if(getObject != null) {
//Stocker dans la liste
getDate.add(getObject .toString());
//Obtenir une référence d'image
spaceRef.add(storageRef.child(/*Image de référence*/));
//Traitement de l'image à laquelle vous souhaitez accéder
getPhoto();
}
}
}
//Acquisition d'image
private void getPhoto() {
int Listsize = spaceRef.size();
//Évitez de regarder hors de la liste
if(Count < Listsize) {
final long ONE_MEGABYTE = 1024 * 1024;
//Événement de stockage
spaceRef.get(Count).getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
//Obtenir une image miniature
Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
/*Mettre le processus à ajouter à la vue de liste*/
Count++;
getPhoto();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
}
});
}
}
J'ai déjà créé la vue de liste d'origine, et je l'ai écrite pour ceux qui trébuchent un peu plus loin, donc c'est tout à fait approprié (je pense que le traitement réellement utilisé n'est pas utile), mais pour le moment j'ai réussi à le faire .. De plus, comme il s'agit de java, je pense personnellement qu'il vaut mieux avoir une vérification nulle solide. Mon ami l'a publié sur Github, je vais donc mettre un lien ici. StutdentTimeline.java et TeacherStudent.java utilisent en fait cette méthode. https://github.com/wasabimochi/ivycon Quand j'en ai envie, je l'écrirai soigneusement et je le posterai (je ne dis pas ça). Veuillez commenter si vous avez des questions. à plus.
Recommended Posts