소켓 통신을 구현중인데 데이터 갱신과 화면에 뿌려주는데 문제가 있습니다.
서버에서 데이터를 3초에 한번씩 보내줍니다. (바이트 데이터)
클라이언트 수신스레드에서 데이터를 수신받고
기존 Array리스트 내용을 지우고 새로운 내용를 넣습니다.
액티비티 화면에서 Array리스트를 불러옵니다.
여기서 문제는 제가 화면을 들어가면
1. 새로만든 데이터 리스트가 옵니다. (정상)
2. 새로 만들기 이전의 데이터가 옵니다. (비정상)
3. 데이터를 새로 만드는 도중 불러오면서 에러가 납니다. (비정상)
그래서 화면에 이전값이 떳다가 최신갑으로 변경되거나
아무것도 뜨지 않다가 최신값으로 변경되기도 합니다.
이문제를 해결하고 싶은데 어떤 방식으로 변경해야 될까요?
스터디가 부족해서 소켓통신 데이터 수신 처리방법에 대해서도 알려주시면 감사하겠습니다.(--)(__)
주요 부분 소스코드
// 수신부
readBuffer = new byte[4096];
while ((count = dis.read(readBuffer, 0, readBuffer.length)) != -1) {
list = new ArrayList<Data>;
list.removeAll(list);
int count = 0;
for(int i = 0; i<10; i++) {
int tmpId= readBuffer[count] & 0xFF;
String strId= Integer.toString(tmpId);
int tmpNum= readBuffer[count+1] & 0xFF;
String strNum= Integer.toString(tmpNum);
int tmpType= readBuffer[count+2] & 0xFF;
String strType= Integer.toString(tmpType);
Data data = new Data(strId, strNum, strType)
list.add(data);
count += 3;
}
}
public ArrayList<Data> getData() {
return list;
}
// 액티비티 화면
Read.getInstance.getData()
이런식으로 액티비티에서 불러와 데이터를 사용 했습니다.
비동기는 ArrayList가 동기화를 보장해주지 않는다고 하더라구요
데이터 처리를 해본적이 없어서 바이트 데이터를 정상적으로 수신은 하지만 이 데이터를
어디에 저장해서 ArrayList로 만들어서 액티비티 화면에 보내줘야 할지 모르겠습니다.
스레드와 동기화 지식이 부족한저에게 팁을 알려주시면 감사겠습니다.