web-dev-qa-db-fra.com

Comment rechercher une valeur dans firebase Android

J'enregistre les données comme suit dans Firebase:

 structure

Je veux trouver tous les disques qui ont #Yahoo dans leur titre. Quelle sera la requête exacte pour cela?

Je suis confondu avec la clé aléatoire créée. Je ne suis pas sûr de savoir comment gérer cela, donc je le publie ici. 

Firebase firebase = new Firebase(Constants.FIREBASE_URL_USER_TASKS).child(Utils.encodeEmail(unProcessedEmail));
        Query queryRef = firebase.orderByKey().startAt("#" + mHashTag).endAt("#" + mHashTag + "\uf8ff");

        queryRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                mTasksList.clear();
                mAdapter.notifyDataSetChanged();
                for (DataSnapshot task : dataSnapshot.getChildren()) {
                    mTasksList.add(task.getValue(TaskModel.class));
                }
                mAdapter.notifyItemRangeInserted(0, mTasksList.size());
                mSwipeToRefresh.post(new Runnable() {
                    @Override
                    public void run() {
                        mSwipeToRefresh.setRefreshing(false);
                    }
                });
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
                mSwipeToRefresh.post(new Runnable() {
                    @Override
                    public void run() {
                        mSwipeToRefresh.setRefreshing(false);
                    }
                });
            }
        });
14
Shajeel Afzal

Vous ne pouvez rechercher aucun élément dont le titre contient#Yahoo. Voir: Comment effectuer une opération "LIKE" avec SQL sur firebase?

Vous pouvez toutefois rechercher des éléments dont le titre commence par#Yahoo:

Firebase firebase = new Firebase(Constants.FIREBASE_URL_USER_TASKS).child(Utils.encodeEmail(unProcessedEmail));

Query queryRef = firebase.orderByChild("title").startAt("#" + mHashTag)

Pour que cela fonctionne bien, vous devez ajouter un index à vos règles Firebase :

"rules": {
  "userTasks": {
    "$email": {
      ".indexOn": "title" // index tasks in their title property
    }
  }
}
17
Frank van Puffelen

Cela fonctionne avec Google Firebase.

DatabaseReference mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
    Query query = mFirebaseDatabaseReference.child("userTasks").orderByChild("title").equalTo("#Yahoo");
    query.addValueEventListener(valueEventListener);

ValueEventListener valueEventListener = new ValueEventListener()
{
    @Override
    public void onDataChange(DataSnapshot dataSnapshot)
    {
        for (DataSnapshot postSnapshot : dataSnapshot.getChildren())
        {
            //TODO get the data here

        }

    }

    @Override
    public void onCancelled(DatabaseError databaseError)
    {

    }
};
4
Son Nguyen Thanh
    DatabaseReference mDatabase =FirebaseDatabase.getInstance().getReference("userTasks");
    mDatabase.orderByChild("title").equalTo("#Yahoo").addListenerForSingleValueEvent(new ValueEventListener() {
               @Override
               public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
       ///Here you can get all data 
    }
    @Override
     public void onCancelled(DatabaseError databaseError) {}
});
3
Anupam

Je sais que c'est tard mais cette solution a fonctionné pour moi.

 getContentResolver().delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                        MediaStore.Video.VideoColumns.DATA + "=?" , new String[]{ paths.get(i) });
0
makkhokher

Essayez le code suivant

DatabaseReference mDatabaseRef =FirebaseDatabase.getInstance().getReference("userTasks");

  Query query=mDatabaseRef.orderByChild("title").equalTo("#Yahoo");

    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot data:dataSnapshot.getChildren()){


                Records models=data.getValue(Records.class);
                String latitude=models.getLatitude();
                String longitude=models.getLongitude();

            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Je n'ai déclaré ici que deux chaînes, latitude et longitude. Si vous voulez charger plus de valeurs, vous devez aussi ajouter cela.

Puis créez une nouvelle classe Records comme suit

public class Records {

public String latitude,longitude;

public Records()
{

}

public String getLatitude() {
    return latitude;
}

public void setLatitude(String latitude) {
    this.latitude = latitude;
}

public String getLongitude() {
    return longitude;
}

public void setLongitude(String longitude) {
    this.longitude = longitude;
} }
0
Mohammed Javad

Réponse: il suffit de faire la requête suivante:

databaseReference.orderByChild('_searchLastName')
 .startAt(queryText)
 .endAt(queryText+"\uf8ff");

Nous pouvons combiner startAt et endAt pour limiter les deux extrémités de notre requête. L'exemple suivant trouve tous les dinosaures dont le nom commence par la lettre b:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="b"&endAt="b\uf8ff"&print=pretty'

Le caractère \uf8ff utilisé dans la requête ci-dessus est un point de code très élevé dans la plage Unicode. Comme c'est après la plupart des caractères normaux dans Unicode, la requête correspond à toutes les valeurs commençant par b.

Voici une question connexe et la documentation officielle .

0
shahid ahmad