我在Firebase中保存数据如下:
我想查找标题中包含#Yahoo的所有记录。对此的确切查询是什么?
我对创建的随机密钥感到困惑。我不知道如何处理这个,所以我在这里发布它。
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);
}
});
}
});
答案 0 :(得分:17)
您无法搜索标题包含 #Yahoo
的任何项目。看到:
How to perform sql "LIKE" operation on firebase?
但是,您可以搜索标题以 #Yahoo
开头的项目:
Firebase firebase = new Firebase(Constants.FIREBASE_URL_USER_TASKS).child(Utils.encodeEmail(unProcessedEmail));
Query queryRef = firebase.orderByChild("title").startAt("#" + mHashTag)
为了更好地完成这项工作,您必须添加index to your Firebase rules:
"rules": {
"userTasks": {
"$email": {
".indexOn": "title" // index tasks in their title property
}
}
}
答案 1 :(得分:4)
这适用于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)
{
}
};
答案 2 :(得分:3)
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 :(得分:0)
尝试以下代码
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) {
}
});
我在这里只声明了两个字符串,纬度和经度。如果要加载更多值,还需要添加它。
然后创建一个新类记录如下
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;
} }
答案 4 :(得分:0)
答案:只需执行以下查询:
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范围内的一个非常高的代码点。由于它位于Unicode中的大多数常规字符之后,因此查询将匹配以b
开头的所有值。
答案 5 :(得分:0)
我知道这很晚了,但是这个解决方案对我有用。
getContentResolver().delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
MediaStore.Video.VideoColumns.DATA + "=?" , new String[]{ paths.get(i) });
答案 6 :(得分:0)
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference animalsRef = rootRef.child("userTasks");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Boolean found;
String search = "Yahoo";
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String movieName = ds.child("movieName").getValue(String.class);
found = movieName.contains(search);
Log.d("TAG", movieName + " / " + found);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
animalsRef.addListenerForSingleValueEvent(eventListener);