É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