2017-02-18 1 views
0

Quelle est la bonne façon d'interroger chaque commentaire (POJO) attaché à une photo (POJO) dans Android. En Firebase, j'ai la structure suivante pour une collection:Firebase - Interrogation à partir de FirebaseListAdapter dans Android

"photos" : { 
    "-KaeuYf9jXcy4oqpRqbi" : {f 
     "entities" : { 
     "type" : { 
      "image" : { 
      "bucket" : "bucket", 
      "prefix" : "https://s3-us-west-2.amazonaws.com/", 
      "suffix" : "image.jpg" 
      } 
     } 
     }, 
     "stats" : { 
     "liked" : 0 
     }, 
     "text" : "Person Detected!", 
     "timestamp" : 1484631194257 
    } 
} 

et pour la collecte de commentaires:

"comments" : { 
    "-KdE6Hwua8d6sBQimPos" : { 
     "attachphoto" : { 
     "-KaeuYf9jXcy4oqpRqbi" : true 
     }, 
     "attachuser" : { 
     "-KaeuYHjkdf9okflslf" : true 
     }, 
     "displayName" : "Gary", 
     "text" : "ok", 
     "timestamp" : 1487385995844 
    }, 
    "-KdE6IPc-NL-6zGkwXq3" : { 
    "attachphoto" : { 
     "-KaeuYf9jXcy4oqpRqbi" : true 
     }, 
     "attachuser" : { 
     "-KaeuYHjkdf9okflslf" : true 
     }, 
     "displayName" : "Thomas", 
     "text" : "ok", 
     "timestamp" : 1487385997735 
    } 
} 

Dans Android J'utilise un FirebaseAdapter, mais je ne parviens pas à définir une requête appropriée cela ne ferait que récupérer les commentaires attachés à une photo spécifique. J'ai la clef de la photo

FirebaseListAdapter adapter = new CommentAdapter(this, Comment.class, R.layout.item_comment, QUERY){ 
      @Override 
      protected void populateView(View v, Comment model, int position) { 
       if(model.getDisplayName()!=null) { 
        String[] name = model.getDisplayName().split(" "); 
        ((TextView) v.findViewById(R.id.id)).setText(name[0]); 
       } 
       ((TextView) v.findViewById(R.id.content)).setText(model.getText()); 
      } 
     }; 

Je pensais que je pourrais définir quelque chose comme:

final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
final DatabaseReference commentsRef = database.getReference("comments"); 
Query query = commentsRef.orderByChild("attachphoto").equalTo() 

Mais je vais avoir une déconnexion sur la façon de finir. Premier projet utilisant Firebase, donc toute aide/conseils serait très appréciée! Firebase est plutôt noSQL, donc il y a des limites que l'on doit contourner ... spécialement lors de la conception de la structure de données.

+1

Il semble que vous essayez de placer les commentaires dans des catégories. Voir http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value –

+0

Merci qui a fonctionné! StringBuilder enfant = nouveau StringBuilder ("attachphoto /"); child.append (imageKey); Requête query = commentsRef.orderByChild (child.toString()). EqualTo (Boolean.TRUE); – gareoke

Répondre

0

par exemple, dans ce cas, il peut être judicieux d'ajouter les identifiants des commentaires des utilisateurs associés (ou même les commentaires associés) dans un nœud imbriqué de la structure, qui représente la photo. il y a d'autres moyens d'y arriver - alors qu'il faut toujours considérer comment rechercher les détails plus tard (parce que la structure dicte quelles requêtes sont possibles et lesquelles ne le sont pas).