无法从Firebase检索数据。应用关闭片段

时间:2018-08-07 23:37:28

标签: 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

该片段不会崩溃,但是字段仍然为空。 谢谢!

这是日志:LOG

1 个答案:

答案 0 :(得分:0)

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

 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());
        }
    });