Android (Java) Синхронизация данных SharedPrefs c через Firebase - сделать один запрос вместо группы - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь найти лучший способ для синхронизации c данных из SharedPrefs, но идей нет.

Я пытаюсь использовать собственный способ, и он действительно работает. У меня есть несколько файлов в Prefs: файл «Sets», который содержит некоторые данные и информацию об именах других Prefs. Таким образом, я сначала должен поместить данные из «Sets», а затем поместить данные из его дочерних элементов.

Таким образом, у нас слишком много запросов к Firebase. Но у Firebase есть месячный лимит бесплатных запросов. Таким образом, важно сделать один большой запрос вместо нескольких запросов.

SharedPreferences Sets = getSharedPreferences("Sets", MODE_PRIVATE);

FirebaseFirestore db = FirebaseFirestore.getInstance();

Map<String, Object> mainSPRowData = (Map<String, Object>) Sets.getAll();

Map<String, Object> mainSP = new HashMap<>();
mainSP.put("ACTIVE_USER", mainSPRowData.get("ACTIVE_USER"));
mainSP.put("USERS_COUNT", mainSPRowData.get("USERS_COUNT"));


DocumentReference documentReference = db.collection("users").document(mAuth.getCurrentUser().getEmail()).collection("Sets").document("MainSet");

documentReference.set(mainSP);
for (String row : (HashSet<String>)mainSPRowData.get("USERS")) {
    SharedPreferences sp = getSharedPreferences(row, MODE_PRIVATE);
    documentReference.getParent().document(row).set(sp);
}

Как мы можем?

Моя схема Firestore:

Firestore-root
    |
    --- users (collections)
    |     |
    |     --- email: mymail@google.com(document)
    |            | 
    |            --- Sets(colletion)
    |                  |
    |                  --- MainSet
    |                        |
    |                        ---ACTIVE_USER: "3"
    |                        ---USERS_COUNT: "21"
    |                  --- user1
    |                  --- user2
    |                  ...
    |                  --- usern
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...