簡體   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