简体   繁体   中英

Can't retrieve data from Firebase. App closes the fragment

I can't retrieve data from Firebase in a Fragment . In the same Fragment I can save data to Firebase , but can't retrieve them. Then I open the Fragment to read data, it crashes.

I use docRef for retrieving and databaseDocumente to save data.

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

I followed tutorials but I didn't succeed. I did something similar in another Fragment and was okay. Here i did the same thing but it crashes. If I use:

docRef.child(userId).addValueEventListener

instead of:

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

the fragment doesn't crash, but the fields are still empty. Thank you!

This is the logcat: LOG

I found a solution. This is the working code:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM