Как вытащить ТОЛЬКО недавно созданные документы из коллекции в режиме реального времени с помощью Firebase Firestore? - PullRequest
0 голосов
/ 30 марта 2020

Итак, я пытаюсь создать приложение для своего учебного проекта, и это, по сути, просто приложение для жилья, которое отображает фид со списками свойств. Моя проблема в том, что при создании я заполняю массив всеми свойствами в коллекции и добавляю прослушиватель снимков. Однако, когда я начинаю свое второе действие по добавлению нового свойства в базу данных, по возвращении в фид mainActivity snapshotListener не реагирует на новый документ свойства, который был добавлен в мою коллекцию, и не добавляет его в мой массив. Так есть ли способ заставить snapshotListener реагировать на то, когда коллекция добавляет новый документ? Я просто хочу, чтобы он добавил новый документ, который был добавлен между снимками, но, может быть, я не знаю, как вызвать новый снимок? Вот код для справки.

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";

private FirebaseFirestore db;
private CollectionReference properties;
private CardViewAdapter adapter;

List<Property> cards;
SwipeFlingAdapterView flingAdapterView;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.d(TAG, "onCreate: started");

    initFirestore();

    cards = new ArrayList<>();
    adapter = new CardViewAdapter(this, R.layout.property_card, cards);

    flingAdapterView = findViewById(R.id.frame);
    flingAdapterView.setAdapter(adapter);
    flingAdapterView.setFlingListener(new SwipeFlingAdapterView.onFlingListener()
    {
        Property property;

        @Override
        public void removeFirstObjectInAdapter()
        {
            property = cards.remove(0);
            cards.add(property);
            adapter.notifyDataSetChanged();
        }
    });

    flingAdapterView.setOnItemClickListener
            (new SwipeFlingAdapterView.OnItemClickListener()
            {
                @Override
                public void onItemClicked(int i, Object o)
                {
                    Intent intent = new Intent(MainActivity.this, ViewContactInfoActivity.class);
                    intent.putExtra(Property.PARCELABLE_PROPERTY, cards.get(0));
                    startActivity(intent);
                }
            });

    properties.addSnapshotListener(this, new EventListener<QuerySnapshot>()
    {
        @Override
        public void onEvent(QuerySnapshot queryDocumentSnapshots, FirebaseFirestoreException e)
        {
            if (e != null)
            {
                return;
            }

            for (DocumentChange dc : queryDocumentSnapshots.getDocumentChanges())
            {
                switch (dc.getType())
                {
                    case ADDED:
                        Log.d(TAG, "New property: " + dc.getDocument().getData());
                        cards.add(dc.getDocument().toObject(Property.class));
                        break;
                    case MODIFIED:
                        Log.d(TAG, "Modified property: " + dc.getDocument().getData());
                        cards.add(dc.getDocument().toObject(Property.class));
                        break;
                    case REMOVED:
                        Log.d(TAG, "Removed property: " + dc.getDocument().getData());
                        break;
                }
            }

            adapter.notifyDataSetChanged();
        }
    });
}

//Initialize FireStore
private void initFirestore()
{
    db = FirebaseFirestore.getInstance();
    properties = db.collection("properties");
}

//Add New Property to DB
public void createListing(View view)
{
    Intent intent = new Intent(MainActivity.this, CreateListingActivity.class);
    startActivity(intent);
}

}

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