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

질문 드립니다!! firebase , iterator 관련

0 추천

public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_random_two);

        value = getIntent().getExtras().get("value").toString();
        uid = getIntent().getExtras().get("uid").toString();

        btn_send_msg = (Button) findViewById(R.id.btn_send);
        input_msg = (EditText) findViewById(R.id.msg_input);
        chat_conversation = (TextView) findViewById(R.id.textView);

        user_uid = uid;

        random_chat();

        btn_send_msg.setOnClickListener(new View.OnClickListener() { <- 버튼을 눌렀을때

            @Override
            public void onClick(View v) {

             

                start_random_chat();
            }
        });
    }

 

    public void start_random_chat()
    {
        mDatabase = FirebaseDatabase.getInstance().getReference("random_chat");
        final DatabaseReference data = mDatabase.child("uid").child("chat_room").child(random_user);

        key = mDatabase.push().getKey();
     

        Map<String,Object> map2 = new HashMap<String, Object>();

 

        message_root = data.child(key);

 

        map2.put("name",value);  <- name과 msg가 각 각 추가됩니다. 그런데,
        map2.put("msg",input_msg.getText().toString());

 

        mDatabase.child("uid").child("chat_room").child(random_user).setValue(null);

        <- (추가된 값을 바로 지워줍니다.)
       

        message_root.updateChildren(map2);

 
        data.addChildEventListener(new ChildEventListener() {

            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                user_chat(dataSnapshot);
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                user_chat(dataSnapshot);
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }

        });

 

    }

    public void user_chat(DataSnapshot dataSnapshot)
    {
        Iterator i = dataSnapshot.getChildren().iterator();

 

        while(i.hasNext()) <- 이 부분에서 몇번씩 반복이됩니다.
        {
            Toast.makeText(this, "while문 시작", Toast.LENGTH_SHORT).show();

            chat_msg = String.valueOf(((DataSnapshot)i.next()).getValue());
            chat_user_name =  String.valueOf(((DataSnapshot)i.next()).getValue());

            chat_conversation.append(chat_user_name+":"+chat_msg+"\n");
            input_msg.setText(null);
        }

    }

 

예를 들면 입력창에 "text"를 입력하면 처음에는 한번이 출력됩니다. 두 번째에는 두 번이 출력되구요

다음에는 네 번이 출력됩니다. "text"를 썼다가 만약 "naver" 를 쓰게 되면,

 

이런식으로 ..

 

name:text <-- 첫 번째

 

name:text <-- 두 번쨰 입력시

name:text

 

name:naver <--세 번째 입력시

name:naver

name:naver

name:naver

 

이런식으로 누적? 이 되는데, 물론 DB에는 똑같은 값이 없습니다 위에서 바로 지워주게 했거든요,

어떻게하면 해결할 수 있을까요?? 답변 부탁드립니다..!

알파고 (4,320 포인트) 님이 2017년 7월 12일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...