每个更新数据firebase android



我正在从firebase中获取数据。例如,我正在开放部分,随着数据库中的时钟的更新。但是,当我进入应用程序时,该数据将更新。我希望在不离开应用程序的情况下更新此数据。例如,我希望time_textview中的数据连续更新。因此,我想用timer每秒从火库中获取数据。我想要time_textview中的数据更新。我该怎么做?

主类

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, OnItemSelectedListener, View.OnTouchListener, RadioGroup.OnCheckedChangeListener{
    ProductsAdapter adapter;
    List<Product> productList;
    dbProducts.addListenerForSingleValueEvent(new ValueEventListener() {
       @Override
       public void onDataChange(DataSnapshot dataSnapshot) {
           productList = new ArrayList<>();
           if (dataSnapshot.exists()) {
               for (DataSnapshot productSnapshot : dataSnapshot.getChildren()) {
                   Product p = productSnapshot.getValue(Product.class);
                   productList.add(p);
               }
               adapter = new ProductsAdapter(MainActivity.this, productList);
                                        recyclerView.setAdapter(adapter);
           }
       }
       @Override
       public void onCancelled(DatabaseError databaseError) {
       }

  });
  }

主要适配器:

 public class ProductsAdapter extends RecyclerView.Adapter<ProductsAdapter.ProductViewHolder> {
        List<Product> productList;
            public void onBindViewHolder(final ProductViewHolder holder, final int position) {
                Product product = productList.get(position);
                holder.textViewTime.setText(product.gettime());
    }
        class ProductViewHolder extends RecyclerView.ViewHolder {
            TextView textViewTime, textTitle, textviewPlaces;
                textViewTime = itemView.findViewById(R.id.time_textView);
    }
  }

使用 ValueEventListener而不是使用 SingleValueEventListener喜欢

   public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, OnItemSelectedListener, View.OnTouchListener, RadioGroup.OnCheckedChangeListener{
ProductsAdapter adapter;
List<Product> productList = new ArrayList<>();
adapter = new ProductsAdapter(MainActivity.this, productList);
recyclerView.setAdapter(adapter);

dbProducts.addValueEventListener(new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot dataSnapshot) {
       productList.clear();
       if (dataSnapshot.exists()) {
           for (DataSnapshot productSnapshot : dataSnapshot.getChildren()) {
               Product p = productSnapshot.getValue(Product.class);
               productList.add(p);
           }
    // here I will recommend just to notify adapter, and initialize it once outside the listener
           adapter.notifyDataSetChanged();
       }
   }
   @Override
   public void onCancelled(DatabaseError databaseError) {
   }

 });
}

现在,每次在DB中更改数据时,侦听器都会自动被调用,您将获得最新数据。然后,您可以清除旧列表,在其中插入新数据,然后致电adapter.notifyDataSetChanged()