FirebaseUI 3.0.0:在新版本的FirebaseRecyclerAdapter中覆盖`onDataChange`方法

时间:2018-06-11 13:48:10

标签: android firebase firebase-realtime-database firebaseui

根据Firebase UI 3.0.0中的FirebaseRecyclerAdapter,我们必须覆盖onDataChange方法,但如何检索其中的数据?

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

    }
  

任何人都可以解释我需要做什么吗?调用valueEventListener还是什么?

1 个答案:

答案 0 :(得分:0)

以下是一些代码片段,可以让您走上正确的道路。    如您所见,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();
}