简体   繁体   中英

How to retrieve data from firebase and put it in a textfield

When I try to retrieve the data from firebase, it says in my LogCat that the value is null. And I can't put the data in the text field

my firebase looks this

Firebase数据库


ive tried to do it with every possible data snapshot. but i think it is because a user have to sign in first.

mAuth = FirebaseAuth.getInstance();
    String gebruiker_id = mAuth.getCurrentUser().getUid();
    String postcode = mAuth.getCurrentUser().getEmail();

    mDatabase = FirebaseDatabase.getInstance().getReference().child("Gebruikers");


    a = (TextView) findViewById(R.id.TestTextViewGeboortedatum);
    b = (TextView) findViewById(R.id.TestTextViewNaam);
    c = (TextView) findViewById(R.id.TestTextviewPostcode);
    d = (TextView) findViewById(R.id.TestTextViewPunten);

    btn = (Button) findViewById(R.id.TestButtonShow);


    mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
           for (DataSnapshot datas : dataSnapshot.getChildren()){
               String keys = datas.child("Postcode").toString();
               c.setText("Postcode :"+keys);
           }

            }


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

        }
    });

the file where I put the data in is :

public class SignUpActivity extends AppCompatActivity implements View.OnClickListener {
//geeft aan dat dese text ingevuld moet worden.
EditText editTextEmail, editTextPassword, editTextGeboortedatum, editTextNaam, editTextPostcode;
int punten = 0;

FirebaseAuth mAuth;

@Override
//protected void is dat deze void beschermt is en alleen usable is in deze class of een gerelateerde class.
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_up);
//geef waardes aan de buttons.
    editTextEmail = findViewById(R.id.editTextEmail);
    editTextPassword = findViewById(R.id.editTextPassword);
    editTextNaam = findViewById(R.id.editTextNaam);
    editTextGeboortedatum = findViewById(R.id.editTextGeboortedatum);
    editTextPostcode = findViewById(R.id.editTextPostcode);
//roept firebase aan
    mAuth = FirebaseAuth.getInstance();
//Zet  de 'knop' op de knop zodat je er op kan klikken. This verwijst naar buttonSignup.
    findViewById(R.id.buttonSignUp).setOnClickListener(this);
    //findViewById(R.id.textViewSignup).setOnClickListener(this);
    findViewById(R.id.textViewLogin).setOnClickListener(this);
}
//private void betekent dat alleen de methodes van deze class toegang hebben tot de members.
private void registerUser() {
    //zorgt ervoor dat je text kan invoeren. met getText weet hij dat er text moet komen to string betekent dat het een string format moet zijn en trim elimineert de spaties aan het begin of eind.
    String email = editTextEmail.getText().toString().trim();
    String password = editTextPassword.getText().toString().trim();

    if (email.isEmpty()) {
        editTextEmail.setError("Email is required");
        //requestfocus zorgt er voor dat er bij elke input wordt geluisterd bij de respective listener component. in dit geval editTextMail.
        editTextEmail.requestFocus();
        return;
    }

    if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        editTextEmail.setError("Wrong Email");
        //requestfocus zorgt er voor dat er bij elke input wordt geluistert bij de respective listener component. in dit geval editTextMail.
        editTextEmail.requestFocus();
        return;
    }

    if (password.isEmpty()) {
        editTextPassword.setError("Password is required");
        //requestfocus zorgt er voor dat er bij elke input wordt geluisterd bij de respective listener component. in dit geval editTextPassword.
        editTextPassword.requestFocus();
        return;
    }
    if (password.length() < 6) {
        editTextPassword.setError("Minimum length of password is 6");
        //requestfocus zorgt er voor dat er bij elke input wordt geluisterd bij de respective listener component. in dit geval editTextPassword.
        editTextPassword.requestFocus();
        return;

    }
    //roept de methode aan van google firebase. om mensen te laten inloggen en registreren via email en password.
    mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {

                //Toast maakt kleine android popup. Length short is de duratie hoe lang de popup blijft staan
                Toast.makeText(getApplicationContext(), "User Registered Successfull", Toast.LENGTH_SHORT).show();

                //Maakt een string van de currect user ID van firebase. getUid = get user ID
                String gebruiker_id = mAuth.getCurrentUser().getUid();

                //Refereert naar de database. De app weet de database te vinden via FIrebaseDatabase.getInstance(). En pakt gelijk de referencies. De .child zijn child tabels van de database
                DatabaseReference current_gebruiker_db = FirebaseDatabase.getInstance().getReference().child("Gebruikers").child(gebruiker_id);

                //Maak een string van de ingevoerde text voor Map newpost.
               String naam = editTextNaam.getText().toString();
                String geboortedatum = editTextGeboortedatum.getText().toString();
                String postcode = editTextPostcode.getText().toString();

                if (punten < 5){
                    punten = 0;
                }

                //Map newpost zorgt er voor dat alles tegelijke tijd wordt geupload in de database
                //Hashmap is een hash tabel gebaseerd op java'smap interface met een collectie of key-value pairs. In dit geval zijn dat "naam", naam etc. dit zorgt er voor dat er geen gedupliceerde keys kunnen zijn
                Map newPost = new HashMap();
                newPost.put("Naam", naam);
                newPost.put("Geboortedatum", geboortedatum);
                newPost.put("Postcode", postcode);
                newPost.put("Punten", punten);
                //Update de values in de database
                current_gebruiker_db.setValue(newPost);

                //Start een nieuwe activity. van SignupActivity naar HomeActivity
                Intent intent = new Intent(SignUpActivity.this, HomeActivity.class);
                //Zou er voor moeten zorgen dat je niet terug naar de signup activity kan als je eenmaal in de homeactivity zit.
                intent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TOP);
                //Begint met de nieuwe activity.
                startActivity(intent);

            } else {
                //task.getexception zijn bijzonderheden. FirebaseAuthusercollisionException betekent dat de user al geregistreerd is.
                //LENGTH_SHORT is de duratie hoelang de toast (android pop-up) gedisplayed is.
                if(task.getException() instanceof FirebaseAuthUserCollisionException){
                    Toast.makeText(getApplicationContext(), "You are already registered", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext(), task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                }
            }
        }
    });
}

@Override
//onclick viewview heroept de onclick listener.
public void onClick(View view) {
    //Switch statement die heeft meerdere nogelijkheden. Switch statements werken met cases. Als een case wordt herroepen switch hij naar die case.
    switch (view.getId()) {
        //als er op de buttonSignup wordt geclickt dan exuceert bij de registerUser.
        case R.id.buttonSignUp:
            registerUser();
            //nadat de registeruse is herroepen moet hij stoppen met break.
            break;

        case R.id.textViewLogin:
           //Als de case textViewLogin wordt herroepen dan start bij  een nieuwe activity.
            startActivity(new Intent(this, MainActivity.class));


    }
}

}

Here is the right way of the retreiving data

// Get a reference to our posts
final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("server/saving-data/fireblog/posts");

// Attach a listener to read the data at our posts reference
ref.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    Post post = dataSnapshot.getValue(Post.class);
    System.out.println(post);
  }

  @Override
  public void onCancelled(DatabaseError databaseError) {
    System.out.println("The read failed: " + databaseError.getCode());
  }
});

After snapshot you need to call getValue instead of that you are making to string

 for (DataSnapshot datas : dataSnapshot.getChildren()){
               String keys = datas.child("Postcode").toString();
               c.setText("Postcode :"+keys);

So first mistake you are not getting the value / Second the structure of the request is also wrong you missed UIS step

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