【问题标题】:How do I fetch data from Firebase Realtime database?如何从 Firebase 实时数据库中获取数据?
【发布时间】:2019-06-15 17:19:34
【问题描述】:

我将一些数据存储在 firebase 实时数据库中并创建问题类。我还创建了一个 commonmodel 类。 这是表演测验活动:

public class ShowQuizActivity extends AppCompatActivity implements View.OnClickListener {

    final static int INTERVAL = 1000;
    final static int TIMEOUT = 7000;
    int progressvalue = 0;

    CountDownTimer mCountDown;

    int index = 0,score = 0,thisQuestion = 0,totalQuestion,correctAnswer;

    FirebaseDatabase database;
    DatabaseReference questions;

    ProgressBar progressBar;
    Button btnA,btnB,btnC,btnD;
    TextView txtQuestion,txtquestionNum,txtScore;


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

        database = FirebaseDatabase.getInstance();
        questions = database.getReference("Question");

        txtQuestion = findViewById(R.id.question);
        txtquestionNum = findViewById(R.id.quNum);
        txtScore = findViewById(R.id.score);

        progressBar = findViewById(R.id.progressBar);

        btnA = findViewById(R.id.option1);
        btnB = findViewById(R.id.option2);
        btnC = findViewById(R.id.option3);
        btnD = findViewById(R.id.option4);

        btnA.setOnClickListener(this);
        btnB.setOnClickListener(this);
        btnC.setOnClickListener(this);
        btnD.setOnClickListener(this);

        loadQuestion(CommonModel.question);


    }

    private void loadQuestion(List<Question> question) {

        if (CommonModel.question.size() > 0)
            CommonModel.question.clear();



    }

这是我的 CommonModel 类:

import java.util.ArrayList;
import java.util.List;

public class CommonModel {

    public static SignInUpModel currentUser;
    public static List<Question> question = new ArrayList<>();

}

问题类在这里:

public class Question {

    private String answer,option1,option2,option3,option4,question;

    public Question() {

    }

    public Question(String answer, String option1, String option2, String option3, String option4, String question) {
        this.answer = answer;
        this.option1 = option1;
        this.option2 = option2;
        this.option3 = option3;
        this.option4 = option4;
        this.question = question;
    }

    public String getAnswer() {
        return answer;
    }

    public void setAnswer(String answer) {
        this.answer = answer;
    }

    public String getOption1() {
        return option1;
    }

    public void setOption1(String option1) {
        this.option1 = option1;
    }

    public String getOption2() {
        return option2;
    }

    public void setOption2(String option2) {
        this.option2 = option2;
    }

    public String getOption3() {
        return option3;
    }

    public void setOption3(String option3) {
        this.option3 = option3;
    }

    public String getOption4() {
        return option4;
    }

    public void setOption4(String option4) {
        this.option4 = option4;
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }
}

数据库结构:

我无法在我的应用中显示此数据。我该怎么办?我

【问题讨论】:

  • 你在哪里检索数据?
  • loadQuestion 方法,我试过 addEventListener 但它不起作用。 @彼得哈达德
  • 这个 loadQuestion 方法不完整,因为我不明白。
  • 您想获取单个问题(05)或所有问题(01、02 ... 05)的数据?请回复@AlexMamo
  • 来自所有问题@AlexMamo

标签: android firebase firebase-realtime-database


【解决方案1】:

根据您的评论,要获得所有问题,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference questionRef = rootRef.child("Question");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<Question> questionList = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Question q = ds.getValue(Question.class);
            questionList.add(q);
            String answer = q.getAnswer();
            String option1 = q.getOption1();
            String option2 = q.getOption2();
            String option3 = q.getOption3();
            String option4 = q.getOption3();
            String question = q.getQuestion();
            Log.d(TAG, answer + "/" + option1 + "/" + option2 + "/" + option3 + "/" + option4 + "/" + question);
        }

        //Do what you need to do with your list
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
questionRef.addListenerForSingleValueEvent(valueEventListener);

【讨论】:

  • 您不能这样做,因为Question 节点中的每个对象都是question 对象,而不是 CommonModel。如果您需要 Question 对象列表,则在迭代时,只需将每个 question 对象添加到 Question 对象列表中,就像我更新的答案中一样。
  • 我从 firebase 获取数据,但它没有显示在 layout.thank u
  • “它不工作”并不能帮助我理解问题所在。您是否尝试过我上面的解决方案?行为是什么?
  • 我正在寻找您的解决方案,它有效,但我获取了这些数据,但它没有显示我的布局。请检查此链接。这是更新问题stackoverflow.com/questions/56642906/…
  • 关于其他问题,我看看,如果我知道答案,我会写给你。
猜你喜欢
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多