java - 如何将 Firebase 实时数据库中的所有数据显示到 TextView 中

标签 java android-studio firebase-realtime-database

我得到的只是 nullPointerException 或数据库中的一项。我想显示所有英语单词及其对应的阿拉伯语单词。我必须使用 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 类(class)

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 在 firebase

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

最佳答案

我对您的代码做了一些更改,并对错误进行了评论。在文本框变量中,您每次都会覆盖内容,因为在 for 循环内调用 textVeiw.setContent() 函数。

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());
        }
    });
}

要么这样,要么您可以使用 MyWords 类型的 arraylist 并存储整个 json,然后您可以将 arraylist 放入 textView 中。

关于java - 如何将 Firebase 实时数据库中的所有数据显示到 TextView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59861250/

相关文章:

java - Java Web 服务的持久单例对象

android - 如何在 Android Studio 中启用 Java 8 语言特性

android - 如何将我的 Firebase 实时数据库传输到 Firebase Cloud Firestore

node.js - 使用 firebase 实时触发函数中的其他引用值

java - 用于列出源文件中所有函数的 linux 工具?

java - gemfire 中的区域 put() 与 putAll()

java - 将 A 类引用传递给 B 类,并将 B 类引用传递给 A 类 Java

android - 从 android 调用 rest api 的更好方法

当我尝试在依赖项中使用 testCompile 时发生 Gradle 'Build Script error'

android - 由于 Firebase 中 ValueEventListener 的匿名实现而导致内存泄漏