>source

Firebase realtime database 를 사용하고 있습니다  내 안드로이드 앱에서. 테이블의 내 항목은 약 300입니다. Firebase 에서 데이터를 가져올 수 없습니다   Datasnapshot . 때로는 20 분로드 후 작동합니다. 데이터 및 응답에 빠르게 액세스하는 방법 iOS 에서 잘 작동하고 있습니다.  동일한 데이터베이스 및 동일한 쿼리로.

private void checkBookingInfo() throws Exception {
    mDatabaseReference.child(FireBaseConstants.BOOKING_INFO_TABLE).limitToFirst(10).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            if (dataSnapshot != null) {
                countArrival = 0;
                countDeparture = 0;
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    //check  arrivals date matches with today's date then increment counter
                    if (snapshot.hasChild(FireBaseConstants.ARRIVAL_DATE)) {
                        String currentDate = Utils.getCurrentDate();
                        String arrivalDate = snapshot.child(FireBaseConstants.ARRIVAL_DATE).getValue().toString();
                        String status = snapshot.child(FireBaseConstants.STATUS).getValue().toString();
                        if (currentDate.equalsIgnoreCase(arrivalDate) && !status.equalsIgnoreCase("Cancel")) {
                            countArrival++;
                        }
                    }
                    //check  departure date matches with today's date then increment counter
                    if (snapshot.hasChild(FireBaseConstants.DEPARTURE_DATE)) {
                        String currentDate = Utils.getCurrentDate();
                        String departureDate = snapshot.child(FireBaseConstants.DEPARTURE_DATE).getValue().toString();
                        String status = snapshot.child(FireBaseConstants.STATUS).getValue().toString();
                        if (currentDate.equalsIgnoreCase(departureDate) && !status.equalsIgnoreCase("Cancel")) {
                            countDeparture++;
                        }
                    }
                }
                setValueInEditText();
            } else {
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e("notme", "");
        }
    });
}


  • 답변 # 1

    Firebase 검색어의 성능을 향상시키기 위해 검색어를 주문한 필드에 색인을 추가 할 수 있습니다. 처럼

     {
       "rules": {
          "YOUR_NODE": {
             ".indexOn": ["FIELD1", "FIELD2"]
         }
       }
      }
    
    

    도움말 링크는 여기에서 찾을 수 있습니다

    Firebase도 여기에 말합니다

    와이즈 비즈

    인덱스가 아직 20 분 동안 적용되지 않더라도 시간이 많이 걸리더라도 UI에 다른 문제가있을 수 있으며 소스에 데이터가 올 수 있지만 UI에는 채워지지 않을 수 있습니다.

    Important: The onDataChange() method is called every time data is changed at the specified database reference, including changes to children. To limit the size of your snapshots, attach only at the highest level needed for watching changes. For example, attaching a listener to the root of your database is not recommended.

관련 자료

  • 이전 android - 키보드가 플러터로 열리면 UI 오버플로
  • 다음 ansible - 다른 호스트 vars에서 한 호스트의 vars_prompt를 통해 정의 된 변수를 사용하는 방법은 무엇입니까?