使用android检索firebase数据并按子进行排序

时间:2017-04-19 07:37:06

标签: android firebase firebase-realtime-database

嗨,大家好我试图从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]作为参考,但无法使其工作

截图 http://imgur.com/a/yrygr

2 个答案:

答案 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()添加到此处是一个解决方案(如果有人需要它)时,它可以工作。感谢