Как отобразить ВСЕ мои данные из базы данных Firebase Realtime в TextView - PullRequest
0 голосов
/ 22 января 2020

Все, что я получаю, это nullPointerException или один элемент из базы данных. Я хочу отобразить все английские слова sh и его арабский c аналог. Должен ли я использовать RecylerView или что-то? Я также попытался поместить выходные данные из {MyWords words = postSnapshot.getValue (MyWords.class)} в ArrayList, но это не сработало. помогите!

 DatabaseReference myRef = database.getReference("My Words"); 
 TextView englishView, arabicView;

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


private void readData() {
    englishView = findViewById(R.id.textView);
    arabicView = findViewById(R.id.arabicView1);

    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                MyWords words = postSnapshot.getValue(MyWords.class);

                englishView.setText(words.getEnglish());
                arabicView.setText(words.getArabic());
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) 
        {
             Log.d("TAG" , databaseError.getMessage());
        }
    });
}

мой класс MyWords

private String english;
private String arabic;

public MyWords(String english, String arabic) {
    this.english = english;
    this.arabic = arabic;
}

public MyWords() {
}


public String getEnglish() {
    return english;
}

public void setEnglish(String english) {
    this.english = english;
}

public String getArabic() {
    return arabic;
}

public void setArabic(String arabic) {
    this.arabic = arabic;
}

мой Json на базе огня

   {
  "My Words" : {
    "office" : {
      "arabic" : "مكتب",
      "english" : "office"
    },
    "pen" : {
      "arabic" : "الغلم",
      "english" : "pen"
    },
    "teacher" : {
      "arabic" : "مدرسة",
      "english" : "teacher"
    },
    "university" : {
      "arabic" : "الجميع",
      "english" : "university"
    }
  }
}

1 Ответ

0 голосов
/ 22 января 2020

Я сделал несколько изменений в вашем коде и комментировал ошибки. В переменной textbox вы каждый раз перезаписывали содержимое, так как функция textVeiw.setContent () была вызвана внутри для for l oop.

DatabaseReference myRef = database.getReference("My Words");
TextView englishView, arabicView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.displaying);
    readData();
}
private void readData() {
    englishView = findViewById(R.id.textView);
    arabicView = findViewById(R.id.arabicView1);
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                MyWords words = postSnapshot.getValue(MyWords.class);

                //here you were overwritting the content of the textbox everytime.
                englishView.setText( englishView.getText()+" "+ words.getEnglish());
                arabicView.setText(arabicView.getText()+" " +words.getArabic());
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d("TAG" , databaseError.getMessage());
        }
    });
}

Либо это, либо вы можете использовать arraylist для типа MyWords. и сохраните все json, затем вы можете поместить массив в textView.

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