Android 按签名用户显示子项
您好,我是firebase的新手,需要帮助显示firebase的子项,这些子项包含与签名用户相同的用户ID 我只需要显示签名用户的子项 这是我的密码 私人消防队Android 按签名用户显示子项,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,您好,我是firebase的新手,需要帮助显示firebase的子项,这些子项包含与签名用户相同的用户ID 我只需要显示签名用户的子项 这是我的密码 私人消防队 private DatabaseReference fNotesDatabase; ArrayAdapter adapter; ListView listView; ArrayList<String> arraylist = new ArrayList<>(); @Override protected voi
private DatabaseReference fNotesDatabase;
ArrayAdapter adapter;
ListView listView;
ArrayList<String> arraylist = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_education);
fAuth = FirebaseAuth.getInstance();
listView = findViewById(R.id.listview);
fNotesDatabase = FirebaseDatabase.getInstance().getReference().child("Notes").child("education");
fNotesDatabase.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String values = datas.getKey();
arraylist.add(values);
adapter = new ArrayAdapter(Education.this, android.R.layout.simple_list_item_single_choice, arraylist);
listView.setAdapter(adapter);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
私有数据库参考fNotesDatabase;
阵列适配器;
列表视图列表视图;
ArrayList ArrayList=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_education);
fAuth=FirebaseAuth.getInstance();
listView=findViewById(R.id.listView);
fNotesDatabase=FirebaseDatabase.getInstance().getReference().child(“注释”).child(“教育”);
fNotesDatabase.addListenerForSingleValueEvent(新值EventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot数据:DataSnapshot.getChildren()){
字符串值=datas.getKey();
arraylist.add(值);
adapter=new ArrayAdapter(Education.this,android.R.layout.simple\u list\u item\u single\u choice,arraylist);
setAdapter(适配器);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
尝试以下操作:
FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
String userId = currentFirebaseUser.getUid();
fNotesDatabase = FirebaseDatabase.getInstance().getReference().child("Notes").child("education");
fNotesDatabase.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String values = datas.getKey();
db = FirebaseDatabase.getInstance().getReference().child(values).orderByKey().equalTo(userId);
db.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//get data
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
在这里,您可以添加对教育的引用,然后检索教育下的直接子项,然后使用orderByKey()
检查是否有与当前登录用户相同的密钥并检索数据。尝试以下操作:
FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
String userId = currentFirebaseUser.getUid();
fNotesDatabase = FirebaseDatabase.getInstance().getReference().child("Notes").child("education");
fNotesDatabase.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String values = datas.getKey();
db = FirebaseDatabase.getInstance().getReference().child(values).orderByKey().equalTo(userId);
db.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//get data
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
在这里,您可以添加对
教育的引用
,然后在教育
下检索直接子项,然后使用orderByKey()
您可以检查是否存在与当前登录用户相同的密钥并检索数据。是否可以尝试此代码并查看它是否与您一起工作:
FirebaseAuth mAuth = FirebaseAuth.getInstance();
// get the current user-id to read data easly
String currentUserId = mAuth.getCurrentUser().getUid();
DatabaseReference userRef = FirebaseDatabase.getInstance()
.getReference().child("notes").child("education");
// get data to them
userRef.child(currentUserId).addValueEventListener(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot datas: dataSnapshot.getChildren()){
String values = datas.getKey();
arraylist.add(values);
adapter = new ArrayAdapter(Education.this,
android.R.layout.simple_list_item_single_choice,
arraylist);
listView.setAdapter(adapter);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
您是否可以尝试此代码并查看它是否与您一起工作:
FirebaseAuth mAuth = FirebaseAuth.getInstance();
// get the current user-id to read data easly
String currentUserId = mAuth.getCurrentUser().getUid();
DatabaseReference userRef = FirebaseDatabase.getInstance()
.getReference().child("notes").child("education");
// get data to them
userRef.child(currentUserId).addValueEventListener(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot datas: dataSnapshot.getChildren()){
String values = datas.getKey();
arraylist.add(values);
adapter = new ArrayAdapter(Education.this,
android.R.layout.simple_list_item_single_choice,
arraylist);
listView.setAdapter(adapter);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
您似乎有一个类似于
/Education/Notes/$uid
的数据结构。因此,要阅读当前登录用户的笔记,请执行以下操作:
fNotesDatabase = FirebaseDatabase.getInstance().getReference().child("Notes").child("education");
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
fNotesDatabase.child(uid).addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
...
您似乎有一个类似于
/Education/Notes/$uid
的数据结构。因此,要阅读当前登录用户的笔记,请执行以下操作:
fNotesDatabase = FirebaseDatabase.getInstance().getReference().child("Notes").child("education");
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
fNotesDatabase.child(uid).addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
...
您希望在ListView中显示的确切数据是什么?因此,如果是
Y5o…
,您希望ListView包含一条名为edu1
的字符串类型的记录?我希望只显示与当前登录用户具有相同用户ID的子孩子是的,Alex我只需要一条记录,或者当有更多子孩子时ren多于1那么同一个用户在哪里请在两个位置添加Y5o…
内容的屏幕截图,Notes
和Users
。您希望在ListView中显示的确切数据是什么?因此在Y5o…
的情况下,您希望ListView包含一条名为edu的字符串类型的记录1
?我只想显示与当前登录用户具有相同用户ID的子用户是Alex我想只显示一条记录,或者当子用户多于1时,所有子用户都是同一个用户请在两个位置添加Y5o…
内容的屏幕截图,注释
和用户
。您好,这不起作用吗s don’不要在代码中显示anythink数据库是Query还是如何定义的?当我将数据库定义为DatabaseReference时,我得到一个错误:“需要不兼容的类型:DtabaseReference Found:Query”是的,使用Query instead仍然不工作,因为它在ListView中没有显示任何项在第二个onDataChange中您应该向ListView添加项Hello它不工作它不显示任何内容您认为代码中的db是querry还是如何定义的?当我将db定义为DatabaseReference时,我得到一个错误“需要不兼容的类型:找到DTABaserReference:查询"是的,使用Query instead仍然不起作用,因为它在第二次数据更改中没有在ListView中显示任何项目。您应该向ListView添加项目不起作用Frank,因为他在教育
节点和用户ID
之间有教育1
或教育2
节点,我错过了。这确实需要反向索引。不是吗我不能工作Frank,因为他在education
节点和userid
之间有edu1
或edu2
,噢,该死,我错过了。这确实需要一个反向索引。