Java 从Firebase实时数据库获取密钥引用

Java 从Firebase实时数据库获取密钥引用,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在尝试编写一个应用程序,从我的Firebase数据库中抛出随机用户名。为了做到这一点,我需要从每个用户那里获取引用密钥,以便我可以将其映射到应用程序不同部分中的用户名 对,结果如下: public void getRandomUsernames(){ mUsersDatabase1.addValueEventListener(new ValueEventListener() { @Override public void on

我正在尝试编写一个应用程序,从我的
Firebase数据库中抛出随机用户名。为了做到这一点,我需要从每个用户那里获取引用密钥,以便我可以将其映射到应用程序不同部分中的用户名

对,结果如下:

public void getRandomUsernames(){

        mUsersDatabase1.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                ArrayList<String> userlist = new ArrayList<String>();
                for(DataSnapshot dsp : dataSnapshot.getChildren()){
                    userlist.add(String.valueOf(dsp.getValue()));
                }

                Object randomitem = userlist.get(new Random().nextInt(userlist.size()));
                Toast.makeText(getBaseContext(), randomitem.toString(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

}

这是我想要的(当然是搭配
吐司):

public void getRandomUsernames(){

        mUsersDatabase1.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                ArrayList<String> userlist = new ArrayList<String>();
                for(DataSnapshot dsp : dataSnapshot.getChildren()){
                    userlist.add(String.valueOf(dsp.getValue()));
                }

                Object randomitem = userlist.get(new Random().nextInt(userlist.size()));
                Toast.makeText(getBaseContext(), randomitem.toString(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

}

main活动

public class MainActivity extends AppCompatActivity {
    private FirebaseAuth mAuth;
    private FirebaseUser mCurrentUser;
    private DatabaseReference mUsersDatabase;
    private DatabaseReference mUsersDatabase1;
    private Toolbar mToolbar;
    private String item;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAuth = FirebaseAuth.getInstance();
        mToolbar = (Toolbar) findViewById(R.id.main_page_toolbar);
        mToolbar.setTitleTextColor(Color.WHITE);
        setSupportActionBar(this.mToolbar);
        getSupportActionBar().setTitle("TestApp");

        mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        String current_uid = mCurrentUser.getUid(); 
        mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);

        mUsersDatabase1 = FirebaseDatabase.getInstance().getReference().child("Users");

    }
丢弃随机用户名的方法

public void getRandomUsernames(){

        mUsersDatabase1.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                ArrayList<String> userlist = new ArrayList<String>();
                for(DataSnapshot dsp : dataSnapshot.getChildren()){
                    userlist.add(String.valueOf(dsp.getValue()));
                }

                Object randomitem = userlist.get(new Random().nextInt(userlist.size()));
                Toast.makeText(getBaseContext(), randomitem.toString(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

}
public void getRandomUsernames(){
mUsersDatabase1.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
ArrayList userlist=新的ArrayList();
对于(DataSnapshot dsp:DataSnapshot.getChildren()){
添加(String.valueOf(dsp.getValue());
}
Object randomitem=userlist.get(new Random().nextInt(userlist.size());
Toast.makeText(getBaseContext(),randomitem.toString(),Toast.LENGTH_LONG).show();
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
}
我尝试过的一切都没有成功。非常感谢您的建议

您试过了吗()

public void onDataChange(DataSnapshot DataSnapshot){
ArrayList userlist=新的ArrayList();
ArrayList键列表=新的ArrayList();
对于(DataSnapshot dsp:DataSnapshot.getChildren()){
添加(String.valueOf(dsp.getValue());
添加(dsp.getKey());
}
int randpos=new Random().nextInt(userlist.size());
Object randomitem=userlist.get(randpos);
String key=keylist.get(randpos);
Toast.makeText(getBaseContext(),randomitem.toString()+“key:”+key,Toast.LENGTH_LONG).show();
}

要获取密钥,只需执行以下操作:

   DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");

reference.addListenerForSingleValueEvent(new ValueEventListener() {
 @Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
   String keys=datas.getKey();
  }
 }
@Override
public void onCancelled(DatabaseError databaseError) {
  }
});
for循环将使您能够在随机键内进行迭代。这
stringkeys=datas.getKey()将返回密钥

公共字符串getKey()

此快照的源位置的键名称

更多信息请点击此处:


我现在很高兴。工作起来很有魅力。非常感谢你!!!太好了!:-)很高兴我能帮助你:)