我在創建一個可以與 firebase 互動并獲取存盤在服務器中的資訊的應用程式時遇到問題。但是我在第 53 行遇到了一些問題。請提供資訊,因為我不知道為什么會這樣。當我嘗試離線直接“問題”時,它完全正常。但是在連接服務器時,每次都失敗。
//Line 53
questions = list.get(index);
這就是我在QuestionAnsActivity.java 中所做的
...
import static com.company.appname.QuizSplash.list;
...
public class QuestionAnsActivity extends AppCompatActivity {
...
List<Questions> allQuestionsList;
Questions questions;
int index = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.question_ans_activity);
...
allQuestionsList = list;
Collections.shuffle(allQuestionsList);
// The below code is my line 53
questions = list.get(index);
}}
這就是我在QuizSplash.java中所做的
public class QuizSplash extends AppCompatActivity {
public static ArrayList<Questions> list;
DatabaseReference databaseReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz_splash);
list = new ArrayList<>();
databaseReference = FirebaseDatabase.getInstance().getReference("Question");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
Questions questions = dataSnapshot.getValue(Questions.class);
list.add(questions);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
Intent intent = new Intent(QuizSplash.this, QuestionAnsActivity.class);
startActivity(intent);
}
}
這是在Questions.java
public class Questions {
String question;
String option1;
String option2;
String option3;
String option4;
String answer;
//==================================================================================================
// Empty constructor
//==================================================================================================
public Questions() {
}
//==================================================================================================
// Constructor
//==================================================================================================
public Questions(String question, String option1, String option2,
String option3, String option4, String answer) {
this.question = question;
this.option1 = option1;
this.option2 = option2;
this.option3 = option3;
this.option4 = option4;
this.answer = answer;
}
//==================================================================================================
// Getter and setter methods start here
//==================================================================================================
public String getQuestion() {
return question;
}
public void setQuestion(String question) {
this.question = question;
}
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 getAnswer() {
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
}
uj5u.com熱心網友回復:
如我所見,您有兩個班級。您實際執行資料庫呼叫以獲取問題的 QuizSplash 類和 QuestionAnsActivity 類,您將來自資料庫的結果分配給名為 的現有串列allQuestionsList。但這不是您應該如何處理實時資料庫。
不要忘記資料是從實時資料庫異步加載的,這意味著需要來自資料庫的資料的任何代碼都需要在onDataChange()方法內部,或者從那里呼叫。因此,您不能將list物件設定為public 和 static 并簡單地在另一個活動中使用它。您需要等待資料完成加載。因此,您可以在回呼中使用該串列,也可以使用我在以下帖子中的回答:
- 如何作為方法的結果回傳 DataSnapshot 值?
我已經解釋了如何使用介面傳播結果。如果您了解 Kotlin,您可能還有興趣閱讀以下文章:
- 如何使用 get() 從 Firebase 實時資料庫讀取資料?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340279.html
標籤:爪哇 安卓 火力基地 Firebase 实时数据库 谷歌云平台
下一篇:Firestore過濾器范圍日期
