Мое приложение получает данные, как это. Я хочу сохранить извлеченные данные из firebase, если приложение убито, и использовать при повторном создании приложения, поэтому я хочу извлекать данные только при изменении базы данных, но не onViewCreated. Я думаю, что я должен использовать комнату базы данных. Сначала извлеките данные в базу данных комнаты, затем покажите данные из базы данных комнаты. Если пользователь вводит новые данные, прослушиватель события value будет работать и снова получать данные в базу данных помещения. Это хороший способ? если нет, то есть ли хороший способ сделать это?
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
this.v = view;
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
final RecyclerView productListView = v.findViewById(R.id.productList);
final ProgressBar mProgresBar = v.findViewById(R.id.inventoryProgressBar);
getDatabase();
fetchProductsToRecyclerList(getContext(),productListView,mProgresBar);}
Например, я использую прослушиватель события value и хочу, чтобы приложение получало данные только с прослушивателями этого события.
public void fetchProductsToRecyclerList(final Context context, final RecyclerView rv,
final ProgressBar pb) {
DatabaseReference myRef = getFirebaseRef();
String userID = getUserId();
myRef.child(userID).child("Products").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
products = new ArrayList<>();
pb.setVisibility(View.VISIBLE);
int counter = 0;
//Get all of the children at this level
Iterable<DataSnapshot> children = dataSnapshot.getChildren();
for (DataSnapshot child : children) {
Iterable<DataSnapshot> cocuklar = child.getChildren();
for (DataSnapshot cocuk : cocuklar) {
counter += 1;
Product prd = cocuk.getValue(Product.class);
if (!prd.getProductID().equals("0x0x00x0xx"))
products.add(prd);
}
}
mAdapter = new ProductAdapter(context, products);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(context);
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(rv.getContext(),
((LinearLayoutManager) layoutManager).getOrientation());
rv.addItemDecoration(dividerItemDecoration);
rv.setHasFixedSize(true);
rv.setLayoutManager(layoutManager);
rv.setItemAnimator(new DefaultItemAnimator());
rv.setAdapter(mAdapter);
if (counter == 0) {
// emptyList.setVisibility(View.VISIBLE);
} else {
// emptyList.setVisibility(View.INVISIBLE);
}
pb.setVisibility(View.INVISIBLE);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}