我的应用正在这样获取数据。如果应用程序被杀死,我想保留从Firebase获取的数据,并在再次创建应用程序时使用它,因此,我只想在数据库更改而不是onViewCreated时才获取数据。我认为我应该使用房间数据库。首先从房间数据库中获取数据,然后显示房间数据库中的数据。如果用户输入新数据,则值事件侦听器将工作并将数据再次提取到会议室数据库。这是个好方法吗?如果没有的话,有什么好方法吗?
@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);}
例如,我正在使用值事件侦听器,并且我希望该应用仅使用此事件侦听器来获取数据。
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) {
}
});
}
答案 0 :(得分:0)
默认情况下,您使用Realtime Database SDK查询的任何数据都将缓存在本地存储中。只要服务器上的数据是最新的,该高速缓存将用于后续查询。您无需执行任何操作即可启用此功能。您不需要额外的缓存,除非您需要以不同于SDK提供的某种方式查询数据。