안드로이드 개발 질문/답변
(글 수 45,052)
thread로 계속 패킷을 받고, 그 패킷에서 필요한 내용을 배열에 저장하여 다른 핸들러로 넘겨주는
작업을 하려고 합니다.
어떻게 생각하면 굉장히 쉬운 문제일수도 있는데 실제로 실험을 해 보면
계속 같은 값이 들어옵니다..
코드는 필요한 부분만 축약 시켰습니다.
private Vector<RxaMessage> Msg = new Vector<RxaMessage>();
private RxaMessage rcvdMsg = null;
public void run(){
while(true){
rxaSocket.receive(packetBuffer); // 패킷을 받고,
handlePacket(packetBuffer.getData()); // 패킷의 내용을 읽어서
// notifyMessageToAll(Msg); // 다른 핸들러에 넘김
}
}
private void handlePacket(byte[] buffer){
// buffer로 부터 rcvdMsg 의 내용을 채움.
rcvdMsg = buffer.getData();
Msg.add(rcvdMsg);
}
이런식으로 되면 패킷의 내용이 1, 2, 3, 4, 5 으로 온다면
vector의 내용이
1, 2, 3, 4, 5 가 되는 것을 기대 하였으나,
5, 5, 5, 5, 5 가 나오게 됩니다.
1, 2, 3, 이 들어오면
3, 3, 3 이 되고..
어쩌면 자바의 문제일 수도 있는데, 제 나름대로 노력해서 알아보려 하였으나 여의치가 않았습니다.
실력이 이렇게 부족해서.. 참 자괴감도 많이 듭니다. ㅠㅠ
vector 뿐만이 아니고 ArrayList, 그냥 배열.. 이런것도 마찬가지로
최후의 내용이 가득차게 되어서..
꼭 해야 하는건데 제힘으로 해결하기 힘들어서 여기에 도움을 요청해 봅니다.
2010.09.18 20:25:12
byte array에 getData 함수가 있는지 모르겠지만.
buffer.getData() 에서 넘어오는 RxaMessage 가 새로 생성되는 것인지, 하나 가지고 계속 사용을 하는 건지 그걸 체크해 보셔야 할 것 같은데요.
break 걸어 놓고 rcvdMsg 주소값이 똑같은 놈이 나오는지 한번 체크해 보세요.
Vector 에 add 시킬때마다 RxaMessage 를 new 로 생성해서 넣어서 test 해 보세요.
2010.09.18 21:10:43
자답
RxaMessage 라는 클래스를 직접 만들어서 이것을 vector로 넘겨주니까 마지막 값이 저장되는 현상이 발생했습니다. RxaMessage에는 int static a, String static b 이런식으로 되어 있습니다. static을 없애면 바로 에러가 나서 없앨수가 없었습니다.
기본적으로 주어지는 형태인 String, Integer.. 이런 클래스를 이용해서 vector로 넘겨줄때는 잘 되었습니다. 그래서 직접 만든 클래스를 쓰지 않고 String, Integer class를 이용해서 넘겨주었습니다.




Msg.add 하실때 rcvdMsg 가 각 packet 마다 new 로 생성된 것들인가요.
아니면 같은 Object 의 data 값만 바꿔서 그 object 를 계속 add 시키는 건가요.
아마 두번째 경우면 위와같이 마지막 데이터만 주루룩 나올 거 같은데..한번 확인해 보세요.