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

안드로이드 파이어베이스 데이터 검색

0 추천

파이어베이스 RDB에 데이터를 저장하고 앱에서 editText부분에 name을 검색하면 db에서 type 값을 가져와 textView에 출력하고 싶은데 잘 안됩니다.. 여러 자료를 찾아봤는데도 잘 안됩니다... 도움 부탁드립니다.

 

 

db에 구조입니다.

 

 

아래와 같이 오류가 발생합니다

2022-11-15 22:38:41.310 23006-23006/com.example.petinfo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.petinfo, PID: 23006
    java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.example.petinfo.Pet.name' on a null object reference in method 'void com.example.petinfo.MainActivity$2.onDataChange(com.google.firebase.database.DataSnapshot)'
        at com.example.petinfo.MainActivity$2.onDataChange(MainActivity.java:122)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:942)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7898)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

 

 

        searchBtn.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View view) {

                readData(search.getText().toString());
                
            }
        });
    }

    private void readData(String data){
        databaseReference.child("petinfo").child(data).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Pet pet = snapshot.getValue(Pet.class);
                textview.setText("이름:" + pet.name);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Toast.makeText(getApplicationContext(),"데이터를 가져오는데 실패했습니다" , Toast.LENGTH_LONG).show();
            }
        });
    }
}
TheFlash#3 (200 포인트) 님이 2022년 11월 16일 질문

1개의 답변

0 추천
 
채택된 답변

데이터 저장시에 맞는 노드위치에 하고 계신지 확인해 보세요.

https://firebase.google.com/docs/database/admin/save-data

 

databaseReference.child("petinfo").child(data)

data = "pet1" 이라고 하면, 제가 이해하기에 위의 코드는

petinfo
    - pet1
     

의 위치를 가리키게 됩니다. 위의 코드는 데이터를 저장하는 것은 아니구요. 데이터 저장은 위의 링크에 있는 대로 Map을 사용해서 저장하도록 되어 있습니다. 우선 아래처럼, 저장을 해보신 다음, 파이어베이스에 가셔서 데이터가 어떻게 저장되는지 확인해 보세요.
테스트 된 코드는 아니므로 위의 링크에 있는 문서를 참조하셔서 테스트 해보세요.
 

DatabaseReference petInfoRef = databaseReference.child("petinfo");
Map<String, Pet> petData = new HashMap<>();
users.put(null, new Pet(data, "Pet type"));

petInfoRef.setValueAsync(petData);

저장되는 구조를 확인하시면 데이터를 어떻게 불러올지도 자연스럽게 이해가 가실겁니다. 파이어베이스 데이터베이스 분서를 잘 읽어보시면 파이어베이스 데이터베이스가 Json 데이터를 처리하는 No SQL 데이터베이스로서 어떻게 동작을 하는지 이해가 가실겁니다.

spark (227,470 포인트) 님이 2022년 11월 16일 답변
TheFlash#3님이 2022년 12월 11일 채택됨
...