Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将我调用的数据从Firebase实时数据库中的listview移动到android studio中的另一个活动?_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何将我调用的数据从Firebase实时数据库中的listview移动到android studio中的另一个活动?

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

因此,我有一个简单的listview应用程序。当我单击一个项目时,它将使用Bundle将数据发送到下一个活动。我第一次使用这个JSON结构

"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来获取值。