web-dev-qa-db-fra.com

Comment lire les données de Firebase ONCE en utilisant Java / Android?

J'essaie d'utiliser l'API Java pour lire les données d'une base de données Firebase dans une application Android dans l'événement onCreate (). En d'autres termes, je j'essaie de faire la lecture la plus simple possible, l'équivalent de ...

ref.once('value', function(snapshot) {

});

... dans l'API Javascript. J'essaie d'utiliser la méthode addEventListenerForSingleValueEvent (), mais il semble que je veuille remplacer la méthode onDataChange (), ce qui n'est pas ce que je veux. Je souhaite extraire les données lorsque l'exécution du programme atteint cette ligne, quels que soient les événements de la base de données. Voici ma fonction (inachevée) ....

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.poll_table);    

        // First get the table layout
        tbl = (TableLayout) findViewById(R.id.pollsTable);

        // Now let's create the header
        TableRow tHead = createPollsTableHeader();

        // Add header to tableLayout
        tbl.addView(tHead, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));

        // Add all polls in ref as rows
        polls.addListenerForSingleValueEvent(new ValueEventListener() {
            // DON'T KNOW WHAT TO DO HERE

        }
    }

Je ne pense même pas que ce soit la bonne méthode. Je veux juste pouvoir obtenir un Datasnapshot que je peux parcourir et extraire des données, comme ...

for (Datasnapshot child : datasnapshot) {
}

..comme si j'utilisais l'événement ref.once('value', function(snapshot) dans l'API Javaxcript.

23
MassStrike

C'est la bonne méthode et vous êtes sur la bonne voie. La dénomination est juste un peu déroutante (désolé!). Si vous effectuez addListenerForSingleValueEvent, votre méthode onDataChange remplacée sera appelée exactement une fois, avec un DataSnapshot, comme vous le souhaitez (et tout comme "ref.once ('value' ...)" le ferait).

Vous devriez donc pouvoir faire:

// Add all polls in ref as rows
polls.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        for (DataSnapshot child : snapshot.getChildren()) {
            ...
        }
    }
}
49
Michael Lehenbauer