Я использую базу данных Firebase в реальном времени.
Я установил: "FirebaseDatabase.getInstance (). SetPersistenceEnabled (true);"
Так хорошо, когда я в автономном режиме, вседанные загружаются так же, как я был онлайн.
Но у меня есть несколько вопросов.
В моем приложении есть чат-группа с несколькими людьми.Давайте предположим, что кто-то в группе и не в сети.Он пишет, что он хочет в чате, и сообщения будут отправлены, когда он станет онлайн.Но пока он не в сети, кто-то выгоняет его из группы.Как мне сообщить firebase:
if (the user still belongs to the group)
{
sync messages
}
else
{
don't sync messages
}
Я пытался проверить, принадлежат ли пользователи группе, пока он находится в автономном режиме, но когда он возвращается в оперативный режим, все уже проверено в автономном режиме, поэтому данныетолько что отправил без повторной проверки.
Давайте представим, что в моем чате 50 сообщений.Пока я не в сети, я получаю 5 сообщений.Когда я вернусь в онлайн, будет ли повторно загружено 55 сообщений или только 5 дополнительных сообщений?
Я просто пытаюсь выяснить, будет ли синхронизация с базой данных стоить мне много данных или нет.
РЕДАКТИРОВАТЬ
Здесьэто способ получения данных из чата:
public void retrievedata () {
UserMessageRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) /**** HERE IS THE PROBLEM***/
{
if (dataSnapshot.exists()) {
DisplayMessages(dataSnapshot);
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
//Nothings
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
//Nothings
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { //Nothings
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
//Nothings
}
});
} // функция для извлечения сообщений
private void DisplayMessages (DataSnapshot dataSnapshot){Iterator iterator = dataSnapshot.getChildren (). Iterator ();
String chatImage = (String) ((DataSnapshot) iterator.next()).getValue();
String chatMessage = (String) ((DataSnapshot) iterator.next()).getValue();
String nID = (String) ((DataSnapshot) iterator.next()).getValue();
String chatTime = (String) ((DataSnapshot) iterator.next()).getValue().toString();
ListOfChats.add(new ChatClass(nID, chatMessage, chatTime, chatImage));
adapter.notifyDataSetChanged();
} Теперь вот проблема.
Если я в автономном режиме и захожу в чат, сообщениятолько что извлеченный с диска, хорошо работает нормально.
НО Если я выхожу в сеть и получаю 2 новых сообщения: вместо вызова onChildAdded для 2 новостных сообщений, он загружает ВСЕ сообщения и затем вызывает onChildAdded с помощьюстарый ребенок и ребенок 2 новостей.Что я хочу, так это чтобы 2 новостных сообщения были добавлены в локальный файл json на моем телефоне и что каждый не загружается каждый раз, когда я открываю сохранение.
Итак, с базой данных Firebase размером около 30 КБ я получил 5-10 МБ загрузок каждый день, даже если я добавлю 2 КБ в день в день ... (Это для университетского проекта, так что сейчас мы как 2 пользователя)
Так есть ли решение для этого (firebase просто обновитеjson файл в локальную базу данных, не загружая ничего) или мне нужно сделать свою собственную базу данных SQL и создать интеллектуальный адаптер синхронизации?
Я уверен, что firebase, должно быть, сделал что-то умное с этим.