嗨,大家好我试图从firebase检索数据,只从字母C开始并按字母顺序排序,但是当我运行程序时它什么也没做,我可以检索所有房间没有问题。这是我的代码,请帮助。
public class RoomsActivity extends AppCompatActivity
{
private Button add_room;
private EditText room_name;
private ListView listView;
private ArrayAdapter<String> arrayAdapter;
private ArrayList<String> list_of_rooms = new ArrayList<>();
private String name;
private DatabaseReference root = FirebaseDatabase.getInstance().getReference().getRoot();
private String user_name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rooms);
name = getIntent().getExtras().get("user_name").toString();
getWindow().setBackgroundDrawableResource(R.drawable.back2);
add_room = (Button) findViewById(R.id.btn_add_room);
room_name = (EditText) findViewById(R.id.room_name_edittext);
listView = (ListView) findViewById(R.id.listView);
arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list_of_rooms);
listView.setAdapter(arrayAdapter);
add_room.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Map<String,Object> map = new HashMap<String, Object>();
map.put(room_name.getText().toString(),"");
root.updateChildren(map);
}
});
root.child("room_name").startAt("C").orderByKey().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Set<String> set = new HashSet<String>();
Iterator i = dataSnapshot.getChildren().iterator();
while (i.hasNext()){
set.add(((DataSnapshot)i.next()).getKey());
}
list_of_rooms.clear();
list_of_rooms.addAll(set);
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(getApplicationContext(),Chat_Room.class);
intent.putExtra("room_name",((TextView)view).getText().toString() );
intent.putExtra("user_name",name);
startActivity(intent);
}
});
}
}
我的数据库
private DatabaseReference root = FirebaseDatabase.getInstance().getReference().getRoot();
当ii获取根时,检索所有数据
root.orderByKey().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Set<String> set = new HashSet<String>();
Iterator i = dataSnapshot.getChildren().iterator();
while (i.hasNext()){
set.add(((DataSnapshot)i.next()).getKey());
}
list_of_rooms.clear();
list_of_rooms.addAll(set);
arrayAdapter.notifyDataSetChanged();
}
我使用[firebase docs] [1]作为参考,但无法使其工作
答案 0 :(得分:0)
根据Java Admin
的文档,您可以执行类似的操作,它也适用于Android
对于以C
开头的数据,
dinosaursRef.orderByKey().startAt("C").endAt("C\uf8ff")
\uf8ff
位于Unicode中的大多数常规字符之后,因此查询应匹配以C
开头的所有值。
对不起,如果它不能正常工作,我本人并没有亲自尝试。
答案 1 :(得分:0)
root.orderByKey().startAt("C").endAt("C\uf8ff").addValueEventListener(new ValueEventListener() {
在将.endAt()添加到此处是一个解决方案(如果有人需要它)时,它可以工作。感谢