J'essaie de trouver s'il existe un moyen de savoir s'il existe des données extraites dans la base de données Realtime Firebase.
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ARRAY accountList = new ArrayList<>(); // Assigning Object to Controls (bullshit) textboxUser = (TextView) findViewById(R.id.textBoxUsername); textboxPass = (TextView) findViewById(R.id.textBoxPassword); buttonEnter = (Button) findViewById(R.id.buttonEnter); postRef = FirebaseDatabase.getInstance().getReference("account"); dataRefaccount = FirebaseDatabase.getInstance().getReference("account"); // OnClick Method Button buttonEnter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { username = textboxUser.getText().toString(); Query query = FirebaseDatabase.getInstance().getReference("account").orderByChild("username").equalTo(username); query.addListenerForSingleValueEvent(valueEventListener); } catch (Exception e) { e.printStackTrace(); } finally { Toast.makeText(getApplicationContext(), getted, Toast.LENGTH_LONG).show(); } } }); } ValueEventListener valueEventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot data : dataSnapshot.getChildren()) { if (data.child(username).exists()) { getted = "yes"; } else { getted = "No"; } } } @Override public void onCancelled(DatabaseError databaseError) { Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_LONG).show(); } };
4 Réponses :
Vous pouvez vérifier si le en fournissant votre structure de base de données, il serait plus facile de fournir une réponse. P > p> dataSnapshot code> existe en appelant les éléments suivants:
La seule méthode autorisée par la communauté Firebase de récupérer des données est la suivante: vous devez essayer le code ci-dessous comme pour être récupéré Nom d'utilisateur: em> strong> p>
xxx pré> blockQuote>
Vous devriez avoir à essayer cela. D'abord, assurez-vous de ne pas avoir d'erreur dans la réponse de la requête.
Query query = FirebaseDatabase.getInstance().getReference().child("account").orderByChild("username").equalTo(username); ValueEventListener valueEventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.getValue() != null && dataSnapshot.getChildrenCount() > 0) { for (DataSnapshot data : dataSnapshot.getChildren()) { // I'm sure you are looking for below line.. Go and try this. if (data.child("username").getValue().toString().equal(username) ) { getted = "yes"; break; } else { getted = "No"; } } } else { getted = No value available; } Toast.makeText(getApplicationContext(), "getted : " + getted, Toast.LENGTH_LONG).show(); } @Override public void onCancelled(DatabaseError databaseError) { Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_LONG).show(); } };
Merci. J'ai aussi le même problème. J'ai oublié que la requête Firebase fait appel à l'ASYNC à la base de données Firebase.
Lorsque vous essayez d'utiliser la ligne de code suivante: La valeur de Un résolution rapide pour ce problème serait d'utiliser Toute la logique liée à la variable code> de code> uniquement à l'intérieur ou appelée à partir de l'intérieur de la méthode Si vous devez l'utiliser à l'extérieur Le rappel, je vous recommande de voir la dernière partie de mon anwser à partir de cette getted code> maintiendra toujours la valeur de
non code >, étant donné que vous essayez de compromettre ce message, les données n'ont pas encore fini de chargement de la base de données. Cela se passe parce que le comportement asynchrone de
ondatacharge () code> méthode. Veuillez noter qu'il n'y a pas de garantie sur la durée de la durée, cela peut prendre quelques centaines de millisecondes à quelques secondes avant que ces données soient disponibles. P>
OndataChange () code>. p>