java - 无法从 Firebase 检索数据。应用程序关闭 fragment

标签 java android firebase firebase-realtime-database

我无法从 Fragment 中的 Firebase 检索数据。在同一个 Fragment 中,我可以将数据保存到 Firebase,但无法检索它们。然后我打开Fragment读取数据,它崩溃了。

我使用 docRef 检索数据,使用 databaseDocumente 保存数据。

 FirebaseDatabase docDatabase = FirebaseDatabase.getInstance();
    DatabaseReference docRef = docDatabase.getReference();
    userId = FirebaseAuth.getInstance().getCurrentUser().getUid();

    docRef.child("Docs").child(userId).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Iterable<DataSnapshot> children = dataSnapshot.getChildren();

            for (DataSnapshot child : children){
                Docum doc = child.getValue(Docum.class);

                itp1.setText(doc.dataitp1);
                itp2.setText(doc.dataitp2);
                rca1.setText(doc.datarca1);
                rca2.setText(doc.datarca2);
            }
        }

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

        }
    });



    final DatabaseReference databaseDocumente;
    userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
    databaseDocumente = FirebaseDatabase.getInstance().getReference("Docs");

    salveaza = (Button) myView.findViewById(R.id.buttonsalveazadoc);
    salveaza.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            adaugaDate();

        }

            private void adaugaDate(){
            String ditp1 = (String) itp1.getText().toString();
            String ditp2 = (String) itp2.getText().toString();
            String drca1 = (String) rca1.getText().toString();
            String drca2 = (String) rca2.getText().toString();
            String drov1 = (String) rov1.getText().toString();
            String drov2 = (String) rov2.getText().toString();
            String dmed1 = (String) med1.getText().toString();
            String dmed2 = (String) med2.getText().toString();
            String dsting1 = (String) sting1.getText().toString();
            String dsting2 = (String) sting2.getText().toString();

                if((!TextUtils.isEmpty(ditp2))&&(!TextUtils.isEmpty(drca2))){
                    String userID = FirebaseAuth.getInstance().getUid();

                    Docum documente = new Documd(itp1,ditp2,drca1,drca2,drov1,drov2,dmed1,dmed2,dsting1,dsting2);

                    databaseDocumente.child(userID).setValue(documente);


                        Toast.makeText(myView.getContext(), "Date salvate", Toast.LENGTH_LONG).show();
                }
                else{
                        Toast.makeText(myView.getContext(), "Introduceti toate datele", Toast.LENGTH_LONG).show();
                    }
        }
    });

    return myView;
}
}

我按照教程进行操作,但没有成功。我在另一个 Fragment 中做了类似的事情,并且没问题。我在这里做了同样的事情,但它崩溃了。如果我使用:

docRef.child(userId).addValueEventListener

而不是:

docRef.child("Docs").child(userId).addValueEventListener

fragment 不会崩溃,但字段仍然为空。 谢谢!

这是日志猫:LOG

最佳答案

我找到了解决方案。这是工作代码:

 FirebaseDatabase docDatabase = FirebaseDatabase.getInstance();
    DatabaseReference docRef = docDatabase.getReference();
    userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
    docRef.child("docs").child(userId).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            Docum doc = dataSnapshot.getValue(Docum.class);

                itp1.setText(doc.dataitp1);
                itp2.setText(doc.dataitp2);
                rca1.setText(doc.datarca1);
                rca2.setText(doc.datarca2);
                rov1.setText(doc.datarov1);
                rov2.setText(doc.datarov2);
                med1.setText(doc.datamed1);
                med2.setText(doc.datamed2);
                sting1.setText(doc.datasting1);
                sting2.setText(doc.datasting2);

//} }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.e("firebaseerror", databaseError.toString());
        }
    });

关于java - 无法从 Firebase 检索数据。应用程序关闭 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51736810/

相关文章:

java - 对我来说,进行这些空检查并提高此代码的性能的更好方法是什么

android - 如何使用 MPAndroidChart 获取选定柱的 x 轴值?

java - String.xml 中的字符串和整数的问题

Android firebase 推送通知最低版本问题

java - JTextField 中的文本不环绕

java - 如何解决 java.lang.NoClassDefFoundError : javax/xml/bind/JAXBException

java - 将 Android 启动 Activity 更改为另一个 Activity = 应用程序无法加载

java - 使用 FileOutputStream outputStream 进入 Intent 选择器

ios - 在 iOS 上自定义 session_start 事件参数

swift - 在 Firebase 中按指定子项过滤和排序