FirebaseUI 3.0.0: переопределить метод onDataChange в новой версии FirebaseRecyclerAdapter - PullRequest
0 голосов
/ 11 июня 2018

Согласно Firebase UI 3.0.0 в FirebaseRecyclerAdapter мы должны переопределить onDataChange метод, но как мне получить данные в нем?

    @Override
    public void onDataChanged() {
        super.onDataChanged();

    }

Может кто-нибудь объяснить, что мне нужно сделать?Вызовите valueEventListener или как?

1 Ответ

0 голосов
/ 12 июня 2018

Вот некоторые фрагменты кода, которые помогут вам выбрать правильный путь.Как видите, метод onDataChange является частью attachValueEventListener.

private List<Upload> uploads;
private ValueEventListener mValueEventListener;

private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;

// In onCreate declare:
uploads = new ArrayList<>();
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);

// 1. Implement attachValueEventListener, like this:
private void attachValueEventListener() {
    if (mValueEventListener == null) {
        mValueEventListener = new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot snapshot) {

                uploads.clear();

                // iterate through values in database
                for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                    Upload upload = postSnapshot.getValue(Upload.class);
                    uploads.add(upload);
                }

                // create mAdapter
                mAdapter = new MyAdapter(getApplicationContext(), uploads);
                // set mAdapter to recycler view
                mRecyclerView.setAdapter(mAdapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                // There was an Error
                Log.d(TAG, "onCancelled: DatabaseError !!!");
                Toast.makeText(getBaseContext(), "attachValueEventListener: Database Error!", Toast.LENGTH_LONG).show();
            }
        };

        mDatabaseReference.addValueEventListener(mValueEventListener);
    }
}

// 2. Implement detachValueEventListener:
private void detachValueEventListener() {
    // detach the listener
    if (mValueEventListener != null) {
        mDatabaseReference.removeEventListener(mValueEventListener);
        mValueEventListener = null;
    }
}

// 3. Attach/Detach the ValueEventListener in onStart/onStop methods:
@Override
protected void onStart() {
    super.onStart();
    // add an event listener to fetch values from firebase database
    attachValueEventListener();
}

@Override
protected void onStop() {
    super.onStop();
    // detach the event listener that fetches values from firebase database
    detachValueEventListener();
}
...