[英]How to retrieve data from firebase and put it in a textfield
當我嘗試從firebase檢索數據時,它在我的LogCat中說該值為null。 我無法將數據放在文本字段中
我的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.