代码之家  ›  专栏  ›  技术社区  ›  pankaj

android firebase数据库中密钥的读取数组

  •  0
  • pankaj  · 技术社区  · 7 年前

    database structure screenshot

    在这里 EventPlayer 我有 eventID 作为键和 事件ID 我正在推送球员详细信息 事件播放器 模型

    现在在我的应用程序中,我想获取一个 事件ID 并在中显示 RecyclerView . 我试过各种组合,但都没有成功。我的代码如下:

    FirebaseRecyclerAdapter<UserDataClass, EventPlayers.EventPlayerViewHolder> adapter= new FirebaseRecyclerAdapter<UserDataClass, EventPlayers.EventPlayerViewHolder>(
                UserDataClass.class,
                R.layout.eventplayercard,
                EventPlayers.EventPlayerViewHolder.class,
                mref.child("EventPlayer").orderByChild("eventID").equalTo(eventId)
        ) {
            @Override
            protected void populateViewHolder(EventPlayers.EventPlayerViewHolder viewHolder, final UserDataClass model, int position) {
                viewHolder.PlayerName.setText(model.getName());
                viewHolder.PlayerPosition.setText("Position: "+model.getPosition());
                viewHolder.PlayerFoot.setText("Foot: "+model.getPreffoot());
                viewHolder.PlayerKnownAs.setText("Event Date: "+model.getKnownas());
                final String key = this.getRef(position).getKey();
    
                viewHolder.btnRemove.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View view){
                        AlertDialog.Builder alert = new AlertDialog.Builder(EventPlayers.this);
                        alert.setTitle("Remove Player");
                        alert.setMessage("Are you sure you want to remove player?");
    
                        alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                                mref.child("EventRequest").child(mAuth.getCurrentUser().getUid()).child(key).setValue(null);
                            }
                        });
                        alert.setNegativeButton("No", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        });
    
                        alert.show();
                    }
                });
            }
        };
    
        recyclerView.setAdapter(adapter);
    

    编辑

    要推送的代码 事件播放器 :

    mref.child("EventPlayer").child(model.getEventID()).push().setValue(model);
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Alex Mamo    7 年前

    在创建的对象时,需要更改第4个参数 FirebaseRecyclerAdapter 这样地:

    mref.child("EventPlayer").orderByChild("eventID").equalTo(eventId)
    

    具有

    mref.child("EventPlayer").child(model.getEventID()).orderByChild("eventID").equalTo(eventId)
    
        2
  •  1
  •   Grimthorr Roland77    7 年前

    从当前的数据库结构中,您将在 EventPlayer 节点,因此 FirebaseRecyclerAdapter 很可能检索列表中错误级别的数据。

    您可以通过删除将推送代码调整为仅使用一个级别 child(model.getEventID()) :

    mref.child("EventPlayer").push().setValue(model);
    

    或者改变你的 FirebaseRecyclerAdapter 使用直接引用:

    mref.child("EventPlayer").child(eventId);