J'enregistre les données comme suit dans Firebase:
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);
}
});
}
});
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
}
}
}
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)
{
}
};
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) {}
});
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) });
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;
} }
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 .