gpt4 book ai didi

java - 在 ListView 中显示来自 Firebase 的数据时出错

转载 作者:行者123 更新时间:2023-12-02 04:04:36 24 4
gpt4 key购买 nike

目前,我正在尝试让一个 Activity 在列出类(class)的情况下工作,并且单击后,它会在带有 ListView 的单独 Activity 中返回用户的姓名和成绩。当用户注册类(class)时,他们的 uid 保存在类(class)下。首先,我检索类名称下列出的 uid,这是可行的。之后,我使用 uid 导航回用户信息并检索姓名和年级并将其组合成一个变量,以便我可以显示它在 ListView 中。不幸的是,当我运行该应用程序时,出现错误:

Can't convert object of type java.lang.String to type com.samuelford48gmail.thsconnect.User

当我在 Debug模式下运行应用程序时,它说名称和等级为空。另外,当我使用 system.out.println 显示数据快照时,它只返回用户 uid 下的类。我认为问题的一部分可能是我在 Firebase 中的结构。

这是我的 Firebase 结构:

{
"Science" : {
"-LhrSfhNaQX1ZiNToeYQ" : {
"Students" : {
"-LhzXqvBPJl-gvN7bZ6c" : "9TKqqNqge5cKpFgjHByAFpZ3iRD2"
},
"date_clasname" : "dd",
"room_number" : "dd",
"teacher" : "dd",
"uid" : "-LhrSfhNaQX1ZiNToeYQ"
},
"-LhrSfwx3nKd3DhRNJRp" : {
"date_clasname" : "dd",
"room_number" : "dd",
"teacher" : "dd",
"uid" : "-LhrSfwx3nKd3DhRNJRp"
},
"-LhrSg-4YJ52a1Zj9LoK" : {
"Students" : {
"-LhrfCKXsrjDWC4dJU8H" : "9TKqqNqge5cKpFgjHByAFpZ3iRD2"
},
"date_clasname" : "dd",
"room_number" : "dd",
"teacher" : "dd",
"uid" : "-LhrSg-4YJ52a1Zj9LoK"
}
},
"Users" : {
"9TKqqNqge5cKpFgjHByAFpZ3iRD2" : {
"Classes" : {
"-LhrfCKVETBZrgOIrCLR" : {
"date_clasname" : "dd",
"room_number" : "dd",
"teacher" : "dd"
},
"-LhzWYnqD-qi8v-MFWKF" : {
"date_clasname" : "dd",
"room_number" : "dd",
"teacher" : "dd"
},
"-LhzXqv0RZMts7Df1Ehg" : {
"date_clasname" : "dd",
"room_number" : "dd",
"teacher" : "dd"
}
},
"email" : "svhsdev@vigoschools.org",
"grade" : "11",
"name" : "Samuel"
},
"NnJlSVeqGXhJ2Nab2bhjr0HIpku2" : {
"Classes" : {
"-LhNEZI73xZWbu8tb4ZL" : {
"date_clasname" : "March 5",
"room_number" : "101",
"teacher" : "pence"
},
"-LhNFH_LB8PGKKOML-Ta" : {
"date_clasname" : "d",
"room_number" : "",
"teacher" : "s"
},
"-LhNFHjC0sYKaXd_OcX2" : {
"date_clasname" : "d",
"room_number" : "",
"teacher" : "s"
},
"-LhrbM1htXYd0CxZiKMZ" : {
"date_clasname" : "dd",
"room_number" : "dd",
"teacher" : "dd"

},
"email" : "samuelford48@gmail.com",
"grade" : "12",
"name" : "Samuel Ford"
},
}
}
}

以下是 ListView 中尝试获取用户姓名和等级的 Activity 的代码:

public class admin_show_students_uid extends AppCompatActivity {

private FirebaseDatabase database;
private DatabaseReference myRef;
String user_info = null;
String name = null;
ListView lv;
ArrayList<String> list=new ArrayList<>();
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.admin_show_students_uid);

lv = (ListView) findViewById(R.id.lv_science_students);
final ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
lv.setAdapter(adapter);
lv.setStackFromBottom(true);
final String post_key = getIntent().getStringExtra("post_key");
database = FirebaseDatabase.getInstance();
myRef = database.getReference("Science").child(post_key).child("Students");
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, String s) {
//name gets the uid saved
name = dataSnapshot.getValue(String.class);

myRef = database.getReference("Users").child(name);

getusersinfo();
adapter.notifyDataSetChanged();
}

@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

}

@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

}

@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

public void getusersinfo(){
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot2 : dataSnapshot.getChildren()) {
User user = dataSnapshot2.getValue(User.class);
String name = user.getName();
String grade = user.getGrade();
user_info = ("Name " + name + "Grade" + grade);
list.add(user_info);

}

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});

}
}

提前感谢您,如果您对我的代码有任何疑问,请告诉我!

最佳答案

问题是您获得了对特定用户的引用,但在 getuserinfo() 中您正在迭代其属性。相反,只需从 dataSnapshot 获取 User 即可。请参阅:

public void getusersinfo(){
studentRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
String email = user.getName();
String grade = user.getGrade();
user_info = ("Name " + email + "Grade" + grade);
list.add(user_info);
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

关于java - 在 ListView 中显示来自 Firebase 的数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56719613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com