Есть ли способ легко записать этот вызов базы данных в функцию? - PullRequest
1 голос
/ 20 июня 2020

Весь текст в приложении, над которым я работаю, хранится в документах FireStore, поэтому для его получения я использую этот фрагмент кода

db.collection("language").document("kCreateNewAccount").get()
  .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
      @Override
      public void onSuccess(DocumentSnapshot documentSnapshot) {
           String viewText = lan.equals("en") ? documentSnapshot.getString("en")
                                              : documentSnapshot.getString("es");
           createAccount.setText(viewText);
      }
  });

Я пытался поместить его в функцию который принимает имя документа в качестве параметра и возвращает соответствующую строку, чтобы избежать повторения одного и того же снова и снова, безрезультатно, любая помощь приветствуется

1 Ответ

1 голос
/ 20 июня 2020

Запросы Firebase являются асинхронными c, вы должны использовать функцию обратного вызова.

  1. Создать интерфейс для обратного вызова

     public interface OnCompleteListener {
         void onComplete(String text);
     }
    
  2. Создать метод для выборки текста по имени документа

     public void getText(String document, final OnCompleteListener onCompleteListener) {
             db.collection("language").document(document).get()
                     .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                         @Override
                         public void onSuccess(DocumentSnapshot documentSnapshot) {
                             String viewText = lan.equals("en") ? documentSnapshot.getString("en")
                                     : documentSnapshot.getString("es");
                             onCompleteListener.onComplete(viewText);
                         }
                     });
         }
    
  3. Вызов метода с именем вашего документа и указанием слушателя

     getText("kCreateNewAccount", new OnCompleteListener() {
                 @Override
                 public void onComplete(String text) {
                     createAccount.setText(text);
                 }
             });
    
...