web-dev-qa-db-ja.com

Java / Androidを使用してFirebase ONCEからデータを読み取る方法

Java APIを使用して、Android onCreate()イベントのアプリケーションでFirebaseデータベースからデータを読み取ろうとしています。つまり、可能な限り単純な読み取りを実行しようとしています...

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

});
_

... Javascript APIで。私はaddEventListenerForSingleValueEvent()メソッドを使用しようとしていますが、onDataChange()メソッドをオーバーライドしたいようです。データベースのイベントに関係なく、プログラムの実行がこの行に達したときにデータを取得したい。これが私の(未完成の)関数です。

_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

        }
    }
_

これが正しい方法だとは思わない。ただ繰り返してデータを取得できるDatasnapshotを取得できるようにしたい...

_for (Datasnapshot child : datasnapshot) {
}
_

..Javaxcript APIでref.once('value', function(snapshot)イベントを使用しているかのように。

23
MassStrike

それは正しい方法であり、あなたは正しい軌道に乗っています。命名はちょっとわかりにくいです(ごめんなさい!)。 addListenerForSingleValueEventを実行すると、オーバーライドされたonDataChangeメソッドは、DataSnapshotを使用して、希望どおりに1回だけ呼び出されます(「ref.once( 'value' ...)」と同じように)。

だからあなたはできるはずです:

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