필자는 Firebase을 처음 사용 했으므로 테이블에서 데이터를 검색하기위한 쿼리에 도움이 필요합니다. 현재 파이어 볼트에서 필요한 데이터에 액세스하여 검색 할 수 있지만 문제는 문제입니다.Android 용 Firebase - 필요한 경우 데이터 검색을위한 이벤트 처리기를 만드는 방법?
내가 본 모든 것에서 firebase 데이터베이스를 사용하면 Query 또는 DatabaseReference 객체에 이벤트 리스너를 추가해야합니다. 질문 내용을 표시하는 메서드가 호출되기 전에 "questions"라는 노드의 내용을 다운로드하려고합니다. 그러나 데이터를 다운로드하는 이벤트의 발생 타이밍을 제어 할 수 없습니다. 따라서 결과로 표시 방법 firebase 이벤트가 발생하기 전에 항상 호출됩니다.
원하는 경우 쿼리를 실행하고 코드의 특정 섹션을 실행하기 전에 쿼리가 완료되도록하려면 어떻게해야합니까? 나는 당신이 쿼리를 실행하고 그 결과를 얻은 다음 당신의 로직으로 전진하는 전통적인 RDB에 익숙하다. firebase로 이벤트 처리기를 사용해야하는 이유는 무엇입니까? firebase 참조 객체와 이벤트 핸들러의 정의를 onCreate()로 옮기고 내 표시 메소드를 호출하는 코드를 onStart()로 옮겼습니다. 아무런 성공없이 동일한 문제가 발생했습니다. 얻으려고하는 데이터는 변경되지 않으므로 처음에는 한 번만 다운로드하여 표시 방법을 사용할 수 있습니다.
다음은 루트의 하위 노드 인 "questions"노드의 이미지입니다. 나는 이것이 해결 얻을 수없는 경우
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get Firebase DB reference
firebase = FirebaseDatabase.getInstance();
fdbRef = firebase.getReference("questions");
// [START Question_event_listener]
fdbRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Questions object and use the values to update the UI
objQuestions = dataSnapshot.getValue();
Log.w("Firebase:", "In Firebase ValueEventListener");
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Questions failed, log a message
Log.w("Firebase Error:", "onCancelled:", databaseError.toException());
Toast.makeText(ReviewActivity.this, "Failed to load question!", Toast.LENGTH_SHORT).show();
}
});
//. . . remaining onCreate logic removed for simplicity
} //end of onCreate
@Override
public void onStart() {
super.onStart();
// I moved this logic from onCreate to onStart but did not help...
// Firebase retrieve must execute before I call any of these
if (list_type == MainActivity.LIST_UNREVIEWED_DOCS)
displayNewReviewForm();
else if (list_type == MainActivity.LIST_REVIEWS)
displayCompletedReview();
else // (list_type == MainActivity.LIST_DRAFTS)
displayDraftReview();
}
다른 대안이 검색 이동 될 수있다 : 내 중포 기지의 DB 여기
에 아이 "질문에"노드의 이미지 내 코드입니다 논리를 이전 활동으로 내 순서대로 전달하고 검색된 데이터를이 활동에 추가로 전달합니다.하지만 그런 일을해야한다는 것은 정말로 어리석은 일입니다. 나는 내가 필요로 할 때 DB로부터 데이터를 얻을 수 있어야한다고 생각할 것이다. 나에게 그것을주는 느낌이 들지 않을 때.
이 문제를 해결할 수 있도록 도와 주신 데 대해 감사드립니다.
안녕하세요 Tanishq - 질문 경로 아래에 약 20 개의 q ## 노드가 있습니다. 필요에 따라 더 추가 할 수 있으며 필요에 따라 활성화/비활성화 할 수있는 "활성화 된"속성이 있습니다. 그래서 고정 된 참조 20 개를 정적으로 코딩하는 것은 내 요구에 맞을 것처럼 들리지 않습니다. 더 중요한 것은 Firebase가 필요로 할 때 (즉, 디스플레이 로직이 발생하기 전에) 쿼리 나 검색을 실행하지 않는 문제를 제거하는 방법으로 참조 레이어 하나를 만드는 것이 어떻게되는지 이해할 수 없습니다. 결국 같은 문제가 생기는 것처럼 보입니다. 내가 놓친 게 있니? – IvanH
레이어를 내려 놓음으로써 생성되는 유일한 차이점은 모든 데이터를 다운로드하지 않는다는 것입니다. 고정 된 참조에서 리스너를 호출하면 자식 리스너를 모두 다운로드합니다. 따라서 리스너를 초기화 할 때 첫 번째 인스턴스에서는 데이터와 함께 모든 하위 노드를 다운로드합니다. –
Firepoint의 구조에 대한 베스트 프랙티스 및 Ref 포인트 아래의 모든 것을 다운로드하는 방법을 알고 있습니다. 깊은 질문이 아닌 질문 데이터를 구체적으로 구조화했습니다. 나는 구조 또는 나의 참조 점이 문제라고 생각하지 않는다. 그것은 검색의 타이밍입니다. 제 경우 엔, 안드로이드가 Firebase Ref & 이벤트 로직을 포함하고있는 Activity의 onCreate를 호출하고 있습니다. 그러면 onStart가 호출되어 디스플레이 메소드가 호출되어 사용자 정의 어댑터를 채우고 데이터 내용을 listview에 표시합니다. 그러나 Firebase는 빈 목록보기를 표시 할 때까지 실제로 검색을 시작하지 않습니다. – IvanH