Мой просмотрщик данных получает данные из json api и заполняет список статей. Теперь я внедрил систему комментирования с помощью базы данных Firebase в реальном времени. Я хочу показать количество комментариев под изображением каждой статьи в обзоре реселлера. Я попробовал несколько способов реализовать это, но все они не очень эффективны.
Сначала я реализовал запрос к базе данных, основанный на уникальном идентификаторе статьи для каждого представления, но, поскольку у recyclerview было более 100 статей, поэтому он делал более 100 обращений к базе данных и вызывал огромную проблему пропускной способности.
Затем я сделал один запрос, чтобы получить счетчик всех комментариев из базы данных, и сохранил их локально в базе данных SQLite и в программе recyclerview. Я запрашиваю базу данных SQLite, чтобы получить количество комментариев, но вставка 100 строк с идентификатором статьи и количеством комментариев в SQLite идет медленно. .
Как вы, ребята, порекомендуете лучший метод для такой задачи, когда я потрачу наименьшее количество трафика и получу также количество комментариев?
Моя структура БД выглядит следующим образом.
![enter image description here](https://i.stack.imgur.com/4dhVM.png)
метод получения комментариев
public void getComments() {
keyrf = FirebaseDatabase.getInstance().getReference().child("Keys");
keyrf.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
HashMap map = new HashMap();
for( DataSnapshot child : dataSnapshot.getChildren() ) {
String childKey = child.getKey();
String c = child.child("c").getValue().toString();
map.put(childKey, c);
addComments(MainActivity.this, childKey, c);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
вставить комментарий метод
public static void addComments(Context context, String childKey, String c) {
try {
SQLiteDatabase myDB = context.openOrCreateDatabase("MyDb", Context.MODE_PRIVATE, null);
myDB.execSQL("CREATE TABLE IF NOT EXISTS comments (articleId INTEGER not null unique, comment INTEGER not null)");
String sql = "REPLACE INTO comments (articleId, comment) VALUES (?, ?)";
SQLiteStatement statement = myDB.compileStatement(sql);
statement.bindString(1, childKey);
statement.bindString(2, c);
statement.execute();
} catch (Exception e) {
}
}