Каждое второе обновление данных Firebase Android - PullRequest
0 голосов
/ 02 июля 2019

Я извлекаю данные из Firebase.Например я делаю секцию вкл-выкл, вкл-выкл по мере обновления часов в базе.Но когда я вхожу и выхожу из приложения, эти данные обновляются.Я хочу, чтобы эти данные обновлялись, не выходя из приложения.Например, я хочу, чтобы данные в time_textview постоянно обновлялись.Поэтому я хочу получать данные из Firebase каждую секунду с помощью 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);
    }
  }

1 Ответ

0 голосов
/ 02 июля 2019

Используйте 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) {

   }


 });
}

Теперь при каждом изменении данных в БД этот слушатель будет автоматически вызываться, и вы будете получать самые последние данные. Затем вы можете просто очистить старый список, вставить в него новые данные и вызвать adapter.notifyDataSetChanged()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...