Java 如何将我调用的数据从Firebase实时数据库中的listview移动到android studio中的另一个活动?
因此,我有一个简单的listview应用程序。当我单击一个项目时,它将使用Bundle将数据发送到下一个活动。我第一次使用这个JSON结构Java 如何将我调用的数据从Firebase实时数据库中的listview移动到android studio中的另一个活动?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,因此,我有一个简单的listview应用程序。当我单击一个项目时,它将使用Bundle将数据发送到下一个活动。我第一次使用这个JSON结构 "teacher": [ { "name": "Carl", "age": "40" }, { "name": "Johnson", "a
"teacher": [
{
"name": "Carl",
"age": "40"
},
{
"name": "Johnson",
"age": "44"
}
],
这是我的Java代码:
Query query = FirebaseDatabase.getInstance().getReference("teacher");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
TeacherHelperClass teacherHelperClass = new TeacherHelperClass();
String name = data.child("name").getValue(String.class);
String age = data.child("age").getValue(String.class);
teacherHelperClass.setName(name);
teacherHelperClass.setAge(age);
arrayList.add(teacherHelperClass);
}
teacherAdapter.notifyDataSetChanged();
listView.setAdapter(teacherAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
Query _query = FirebaseDatabase.getInstance().getReference("teacher");
_query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String _name = dataSnapshot.child(String.valueOf(position)).child("name").getValue(String.class);
String _age = dataSnapshot.child(String.valueOf(position)).child("age").getValue(String.class);
Bundle bundle = new Bundle();
bundle.putString("dataName", _name);
bundle.putString("dataAge", _age);
TeacherDetailBottomSheet bottomSheetDialog = new TeacherDetailBottomSheet();
bottomSheetDialog.setArguments(bundle);
bottomSheetDialog.show(getSupportFragmentManager(), "exampleBottomSheet");
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
});
也许再加一个孩子
"teacher": {
"001": {
"name": "Carl",
"age": "40",
"email": "....",
"phone-number": "...."
},
"002": {
"name": "Johnson",
"age": "44",
"email": "....",
"phone-number": "...."
}
}
我应该在Java代码中更改什么?特别是在setOnItemClick方法中。我想在列表视图中显示姓名和年龄孩子,并将所有数据(姓名、年龄、电子邮件、电话)发送到下一个活动。我搜索了类似的问题,但没有找到明确的解决方案。代码应该是这样的:
Public class TeacherModel{
String key,name ,age;
// CREATE empty constructor ,GETTER and SETTER FOR THESE VARIABLES
}
教师示范班应如下所示:
Public class TeacherModel{
String key,name ,age;
// CREATE empty constructor ,GETTER and SETTER FOR THESE VARIABLES
}
现在,创建TeacherModel类的列表
List<TeacherModel> teachersList = new ArrayList<>();
FirebaseDatabase.getInstance().getReference("teacher").
addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists())
{
for (DataSnapshot data : dataSnapshot.getChildren()) {
TeacherModel teacher =
dataSnapshot.getValue(TeacherModel.class);
teacher.setKey(dataSnapshot.getKey());
teachersList.add(teacher);
}
teacherAdapter.notifyDataSetChanged();
listView.setAdapter(teacherAdapter);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
List teachersList=new ArrayList();
FirebaseDatabase.getInstance().getReference(“教师”)。
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.exists())
{
对于(DataSnapshot数据:DataSnapshot.getChildren()){
教师模范教师=
getValue(TeacherModel.class);
setKey(dataSnapshot.getKey());
教师列表。添加(教师);
}
teacherAdapter.notifyDataSetChanged();
setAdapter(teacherAdapter);
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
要将数据从一个活动发送到另一个活动,可以使用shared ViewModel,也可以创建一个公共类和该数据类型的变量,并将该值设置为该变量,然后在另一个活动中访问该变量
Public class Common{
Public static List<TeacherModel> teacherList;
}
公共类公共类{
公共静态列表教师列表;
}
在onClickListener中,您可以将值设置为teacherList,如Common.teacherList=teacherList代码>
现在在另一个活动中,您可以使用Common.teacherList获得该列表
请随意询问是否有不清楚的地方。如果这对您有帮助,请将其标记为正确答案。如果我用按键而不是001、002键给您写答案会有帮助吗?是的,会有帮助。但是我想,也许我需要在发布应用程序时使用教师id。001和002只是一个例子。我应该为公共类创建一个新文件吗?“List teacher=data.getValue(TeacherModel.class);”中有一个错误。。。。所需类型:列表。。。。提供:老师对不起我的不好,你应该用。TeacherModel teacher=dataSnapshot.getValue(TeacherModel.class);我已经编辑了上面的añswer,现在可以了。是的,您需要为公共类创建一个新文件,并且在开发过程中使用该类变量非常容易(在上面的代码中,我创建了一个变量教师列表)共享数据或存储数据,而不是通过另一个方法传递,因为它是一个公共类,所以您可以访问它,并且它的变量无处不在。最后一件事,“现在在另一个活动中,您可以使用Common.teacherList获取该列表;”。。。如何获取数据?我需要把它放在一根绳子里。您可以显示代码吗?如果您需要列表中的数据,可以使用get();例如::Common.teacherList.get(0);如果您想存储字符串类型的数据并在另一个活动中检索它,您可以创建另一个字符串类型的变量,例如。。。。。。在Common类中,make a variable=>public static String variableToStoreStringData;并将值分配给此变量Common.variableToStoreStringData=“任意所需数据”。现在在另一个活动中,只需使用Common.variableToStoreStringData来获取值。