如何管理100个firebase查询



我有一个Android应用程序,像任何其他Android应用程序,我必须填写数据是从Firebase实时数据库检索,现在随着时间的推移,我已经注意到查询增长到超过100,现在每次我必须读取数据,我必须添加ValueEventListeners到引用。为了避免使用冗长的引用,我创建了一个静态Constants类来存储所有引用。示例

public class Constants {

public static final String THUMB_URL= "https://www.qualcomm.com/sites/ember/files/styles/scale_480/public/components/two-column-hdi/side/blue-ai-inception-badge-updated-2.png?itok=cOkbug7y";
public static final FirebaseUser CURR_USER= FirebaseAuth.getInstance().getCurrentUser();
public static final String UID= FirebaseAuth.getInstance().getCurrentUser().getUid();
public static final DatabaseReference ROOT_REF=FirebaseDatabase.getInstance().getReference();
public static final DatabaseReference QUIZ_REF=ROOT_REF.child("quizzes");
public static final DatabaseReference QUIZ_HOF_REF=QUIZ_REF.child("hof");
public static final DatabaseReference QUIZ_HOF_Q_REF=QUIZ_HOF_REF.child("questions");
public static final DatabaseReference QUIZ_HOF_TOTQ_REF=QUIZ_HOF_REF.child("totalQuestions");
public static final DatabaseReference SCORECARD_REF=ROOT_REF.child("scorecards");
public static final DatabaseReference SCORECARD_UID_REF=SCORECARD_REF.child(UID);
//Similar declarations   
}

现在,为了进行查询,我创建了一个带有静态函数的类,它使用了这些引用。示例

public final class MyUtilsApp  {
public static void queryByQuestionNumber(String quizName, String questionNumber) {
Query query = Constants.QUIZ_REF.child(quizName).child("questions")
.orderByChild("questionNumber").equalTo(questionNumber).limitToFirst(1);
query.addChildEventListener(new ChildEventListener() {..});
}
public static void queryAllQuestions(String quizName){
Query query=Constants.QUIZ_REF.child(quizName).child("questions").orderByChild("questionNumber");
query.addChildEventListener(new ChildEventListener() {..});
}
public static void upgradeScore(String quizName){
DatabaseReference reference=Constants.SCORECARD_UID_REF.child("score");
reference.addListenerForSingleValueEvent(new ValueEventListener(){...});
}
//Similar Functions
}

现在回到问题,这是如何错误或正确的管理查询在Android。尤其是当查询数超过50的时候?

如果你使用这个没有问题,但我建议使用AsyncTask()来确保所有查询不会同时被查询!

最新更新