파이어베이스와 연동시 키보드를 내려야지면 적용이 됩니다.

조회수 488회

최초 실행시 파이어베이스와 연동하여, 띄우고 싶은 목록을 모두 가져오는 데 성공하며, 입력한 값들은 파이어베이스에 즉시 저장됩니다. 그러나 그렇게 변경된 내역이 안드로이드에 즉시 반영되지 않고, 키보드 입력창을 종료한 뒤에만 적용됩니다.

제가 생각하는 문제는 경로로 인한것인데, 경로가 잘못되어 이벤트리스너가 잘 작동하지 않았고, view가 바뀔때마다 액티비티가 재실행되서 되었다 정도입니다.

public void getFirebaseDatabase() {
    final ValueEventListener postListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Log.d("onDataChange", "Data is Updated");
            chatlists.clear();
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                String key = postSnapshot.getKey();
                ChatListItem get = postSnapshot.getValue(ChatListItem.class);
                String[] info = {get.getNAME()};
                chatlists.add(get);
                Log.d("getFirebaseDatabase", "key: " + key);
                Log.d("getFirebaseDatabase", "info: " + info[0]);
            }
            adapter = new ChatListItemAdapter(ChatListActivity.this, chatlists);
            adapter.notifyDataSetChanged();
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    };
    mPostReference.child("chatroom_list").addValueEventListener(postListener);
}
public void postFirebaseDatabase(boolean add){
    Map<String, Object> childUpdates = new HashMap<>();
    Map<String, Object> postValues = null;
    HashMap<String, Object> result = new HashMap<>();
    if(add){
        ChatListItem post = new ChatListItem(chatroomname);
        result.put("NAME", chatroomname);
        postValues = result;
    }
    childUpdates.put("/chatroom_list/" + chatroomname, postValues);
    mPostReference.updateChildren(childUpdates);
    clearET();
}
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 말씀하신대로 Lifecycle 관련 문제가 아닌가 싶네요. 그러나 올려주신 코드만으로는 원인을 파악에 어려움이 있습니다 알 수 없는 사용자 2019.6.24 17:02

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)