有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在文本视图中显示Firebase实时数据库中的所有数据

我得到的只是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());
        }
    });
}

我的单词课

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

我在firebase上的Json

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

共 (1) 个答案

  1. # 1 楼答案

    我对你的代码做了一些修改,并对错误进行了评论。在textbox变量中,您每次都会将内容覆盖为textVew。在for循环中调用了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());
            }
        });
    }
    

    或者你可以使用arraylist创建MyWords类型并存储整个json,然后你可以将arraylist放在textView中