繁体   English   中英

如何从firebase检索数据并将其放在文本字段中

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

当我尝试从firebase检索数据时,它在我的LogCat中说该值为null。 我无法将数据放在文本字段中

我的firebase看起来如此

Firebase数据库


我试图用每个可能的数据快照做到这一点。 但我认为这是因为用户必须先登录。

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) {

        }
    });

我放入数据的文件是:

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


    }
}

}

这是检索数据的正确方法

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

在快照之后,您需要调用getValue而不是您要对字符串进行调用

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

所以第一个错误你没有得到值/第二个请求的结构也错了你错过了UIS步骤

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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