마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 파이어베이스 리얼타임 질문ㅠㅠ

0 추천

안녕하세요 파이어베이스에서 스피너로 데이터를 입력받아 리얼타임 파이어베이스를 통해 데이터를 검색하고싶은데 기능 구현이 잘 명시되 있지 않고 다중쿼리?는 지원을 안한다 길래 방법이 있나 싶어 여쭤봅니다.

첫번째  코드는 xml 이고 , 두번쨰 코드는 자바에서 스피너 데이터 넣는 코드이고 , 세번쨰 사진은 데이터베이스 사진이고, 네번쨰 사진은 기능사진입니다.

     <Spinner
            android:id="@+id/gender_spinner"
            android:layout_width="95dp"
            android:layout_height="50dp" />
    <Spinner
        android:id="@+id/location_spinner"
        android:layout_width="100dp"
        android:layout_height="50dp" />
    <Spinner
        android:id="@+id/home_care_spinner"
        android:layout_width="100dp"
        android:layout_height="50dp" />
        <Button
            android:id="@+id/find_matching"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:backgroundTint="#87CEFA"
            android:textStyle="bold"
            android:text="검색">
        </Button>
location_list = new ArrayList<>();
        location_list.add("선택 없음");
        location_list.add("인천");
        location_list.add("경기");
        location_list.add("서울");
        location_list.add("전북");
        location_list.add("전남");
        location_list.add("충남");
        location_list.add("충북");
        location_list.add("제주");
        location_list.add("부산");
        location_list.add("대구");
        location_list.add("대전");
        location_list.add("울산");

        arrayAdapter = new ArrayAdapter<>(getApplicationContext(),
                android.R.layout.simple_spinner_dropdown_item,
                location_list);
        location_spinner = (Spinner) findViewById(R.id.location_spinner);
        location_spinner.setAdapter(arrayAdapter);
        location_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()

        {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

코딩뉴비 (310 포인트) 님이 2022년 10월 24일 질문
첫번째 스피너는  데이터베이스에 있는 member 그룹의 gender 항목 이고, 두번째 스피너는 맴버 그룹의 지역 항목이고 , 세번쨰 스피너는 caregiver 그룹의 location_work 인데 테이블 조인과 함께 다중쿼리가 어떤식으로 가능한지 궁금합니다 ㅠ
현재 검색하고 하는 쿼리가 기존 SQL 문법으로 치자면
SELECT m.signID , m.signName , m.gender , c.career,
c.license, c.info2_rating , c.workTime
FORM member m INNET JOIN caregiver c
ON m.signID = c.signID
입니다.

1개의 답변

0 추천
 
채택된 답변
그냥 정답만을 찾지 마시고 관련된 리소스를 많이 보시고, 어떻게 파이어베이스 리얼타임 데이터베이스가 동작하는지를 먼저 차근차근 이해하시면 좋을 것 같습니다.

https://firebase.google.com/docs/database/android/lists-of-data#filtering_data
https://www.youtube.com/c/firebase

https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md#using-firebaseui-with-indexed-data

파이어베이스 Realtimedabase는 조인은 지원되지 않을 겁니다. Firestore에는 비슷한 기능이 존재하는 것 같긴 하지만요.
member 노드를 먼저 가져오신 다음에 멤버에 있는 signID를 가지고 caregiver 노드를 가져오시는 방식으로 처리를 하셔야 할 겁니다. 데이터를 읽어오는 방법은 파이어베이스 문서에 나와있는 걸 참조하시면 되구요.

그리고 제 기억으로는 Realtimedabase 같은 경우는 HTTP(S)을 통해 특정 노드를 바로 접근할 수 있는 구조입니다.
예를 들면, 올리신 샘플데이터를 기준으로

member 리스트 가져오기: GET FirebaseReltimeDatabaseURL/member
note id가 NEpiRtiYU866BI 인 멤버 가져오기 : GET FirebaseReltimeDatabaseURL/member/NEpiRtiYU866BI
node id가 NF8n1RwbBIXzvn인 caregiver 가져오기: GET FirebaseReltimeDatabaseURL/caregiver/NF8n1RwbBIXzvn

로 가져올 수 있습니다. GET 은 HTTP get 방식이고 FirebaseReltimeDatabaseURL는 Realtimedabase 콘솔에 보시면 제공되는 URL입니다. 따라서 node ID를  signID로 사용하시면 HTTP로 원하는 데이터를 바로 가져오기 쉽습니다. 제 기억으로는 예전에 저는 Firebase SDK대신에 Retrofit으로 해서 Realtimedabase를 사용했던 기억이 있네요. signID를 노드 id 로 사요한다면 SDK를 사용하더라도 손쉽게 원하는 노드만을 가져올 수 있을 것 같습니다.
spark (229,930 포인트) 님이 2022년 10월 25일 답변
코딩뉴비님이 2022년 10월 25일 채택됨
감사합니다.. 헌데 제가 입문자라 이해못한부분도 있고 어렵네요 ㅠ
...