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

안드로이드 파이어베이스 데이터읽기 질문드립니다

0 추천

일단 파이어베이스 리얼타임데이터베이스 구조입니다 

보시면 이러한 구조로 되어잇습니다 다음은 코드 부분입니다 

private FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
private DatabaseReference databaseReference = firebaseDatabase.getReference();
btn_charge.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String uid = firebaseAuth.getCurrentUser().getUid();
        Log.d("UID", "UID있다" + uid);
        databaseReference.child("users").child("user").child(uid).addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                User_model user_model = dataSnapshot.getValue(User_model.class);
                String User_Point = user_model.getUserPoint();
                String str = edit_charge.getText().toString();
                Log.d("user" , "user포인트" +user_model.getUserPoint());

                int strint = Integer.parseInt(User_Point);
                int strint2 = Integer.parseInt(str);
                int hap = strint + strint2 ;
                String userpoint = String.valueOf(hap);
                Log.d("userpoint합" , "userpoint의 합" + userpoint);
                user_model.setUserPoint(userpoint);

                Map<String , Object> map = new HashMap<>();
                map.put("userPoint",userpoint);
                databaseReference.updateChildren(map);
            }
            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            }
            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
            }
            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        Intent intent = new Intent(member_charge.this , member_main.class  );
        startActivity(intent);
    }

});

이런식으로 작성햇는데

로그 찍어본결과 uid 값은 나오고 그뒤 

Log.d("user" , "user포인트" +user_model.getUserPoint()); 

이부분 로그가 안나오는걸로봐서 유저의 데이터값을 못읽어오는건데 어느부분이 잘못되서

못읽어오는지 도저히 이해가 안되서 질문드립니다 

 

 

 

 

 

공과근성 (6,020 포인트) 님이 2019년 5월 26일 질문

2개의 답변

0 추천
onChildAdded에 로그를 넣었으니 디비 쓸때만 로그가 찍힐겁니다. 해결 방법은 별도로 리스너를 만들어서 디비에 붙혀줘야됩니다.
티메마케 (240 포인트) 님이 2019년 5월 27일 답변
DB를 쓰는 이벤트를 (버튼클릭) 을 주엇을때 안나오는건데 그냥 db를 못읽는다는 소린데 .....
코드가 짤려서 다 안보이지만 리스너가 있어야 값을 읽어오지요.
리스너를 달아야 되고요. 리스너를 따로 멤버 값으로 선언해서 디비에 연결해줘야 됩니다.
짤려서 안보이지만 리스너잇어요 ..
아래 답변주신분이 정확하게 답변했네요. 소스코드는 버튼을 누르면서 디비에 동시에 써야 되는 구조라 당근 로그에 잡을수가 없게 되어 있네요.
신경써주셔서 답변해주신거 감사합니다 문서보다가 해결해서 인사드리는걸 깜빡햇네요 감사합니다
0 추천

사용처를 잘못 알고 쓰신것 같아요. child 리스너는 해당 참조 노드의 자식노드에 새로 키:값 쌍이 추가될때 그것을 캐치해서 가져오는 콜백인데요. 현재 버튼을 누르면 user노드의 값들을 가져오시려는것 같은데요 이럴땐 1회성이면 addListenerForSingleValueEvent 매번 캐치하려면 addValueEventListener를 사용하셔야 해요. 
현재 코드에서 값이 읽어와 지려면  UID노드 아래에 UserAge : "20" (예시) 와 같은 값이 추가될때나 읽어와 질거에요.

익명사용자 님이 2019년 5월 27일 답변
감사합니다 이댓글보기전에 해결햇는데 리스너를 잘못쓴게 맞네요
...