0
votes

Comment savoir s'il y a des données récupérées dans la Firebase?

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


0 commentaires

4 Réponses :


0
votes

Vous pouvez vérifier si le dataSnapshot existe en appelant les éléments suivants: xxx

en fournissant votre structure de base de données, il serait plus facile de fournir une réponse.


0 commentaires

0
votes

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: xxx


0 commentaires

0
votes

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


1 commentaires

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.



0
votes

Lorsque vous essayez d'utiliser la ligne de code suivante: xxx

La valeur de getted maintiendra toujours la valeur de non , é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 () 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.

Un résolution rapide pour ce problème serait d'utiliser Toute la logique liée à la variable de uniquement à l'intérieur ou appelée à partir de l'intérieur de la méthode OndataChange () .

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 POST dans lequel j'ai expliqué comment cela peut être fait en utilisant un rappel personnalisé. Vous pouvez également jeter un coup d'œil à cette vidéo pour un meilleure compréhension.


0 commentaires