Как найти значение в firebase Android
Я сохраняю данные в Firebase следующим образом:
Я хочу найти все записи, которые имеют #Yahoo в своем названии. Каким будет точный запрос?
- ANDROID: разделить экран на 2 равных части с 2 списками
- Как показать текущее местоположение на карте Google на Android Marshmallow?
- Как отобразить PDF через веб-браузер Android без «загрузки» в первую очередь
- Очистить кэш в приложении Android программно
- Как увеличить размер кучи приложения для Android?
Я смущен созданным случайным ключом. Я не уверен, как справиться с этим, поэтому я размещаю его здесь.
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); } }); } });
- Как полностью убить / удалить / удалить / остановить AsyncTask в Android
- вопрос с "@id" против "@ + id" в позиционировании в Relative Layout
- Сохранить ArrayList в SharedPreferences
- Android-библиотека Gradle release JAR
- Как записывать телефонные звонки в Android?
- как удалить содержимое текстового файла без удаления
- Дальнейшее понимание setRetainInstance (true)
- Обнаружить сенсорное нажатие против длинного нажатия против движения?
Вы не можете найти какой-либо элемент, название которого содержит #Yahoo
. См.: Как выполнить операцию sql «LIKE» на firebase?
Однако вы можете искать объекты, чье название начинается с #Yahoo
:
Firebase firebase = new Firebase(Constants.FIREBASE_URL_USER_TASKS).child(Utils.encodeEmail(unProcessedEmail)); Query queryRef = firebase.orderByChild("title").startAt("#" + mHashTag)
Чтобы сделать эту работу хорошо, вы должны добавить индекс в свои правила Firebase :
"rules": { "userTasks": { "$email": { ".indexOn": "title" // index tasks in their title property } } }
Это работает с 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) {} });
Попробуйте следующий код
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) { } });
Я объявил здесь только две строки, широту и долготу. Если вы хотите загрузить больше значений, вам также нужно добавить их.
Затем создайте новый class Records следующим образом
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; } }
Ответ: просто выполните следующий запрос:
databaseReference.orderByChild('_searchLastName') .startAt(queryText) .endAt(queryText+"\uf8ff");
Мы можем комбинировать startAt и endAt, чтобы ограничить оба конца нашего запроса. В следующем примере найдены все динозавры, чье имя начинается с буквы b
:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="b"&endAt="b\uf8ff"&print=pretty'
Символ \uf8ff
используемый в запросе выше, является очень высокой точкой кода в диапазоне Unicode. Поскольку это происходит после большинства обычных символов в Юникоде, запрос соответствует всем значениям, начинающимся с символа b
.
Вот связанный вопрос и официальные документы .
Я знаю, что это поздно, но это решение сработало для меня.
getContentResolver().delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, MediaStore.Video.VideoColumns.DATA + "=?" , new String[]{ paths.get(i) });