안드로이드 개발 질문/답변
(글 수 45,052)
암칩에서 블루투스를 이용해서 핸드폰으로 자료를 전송하는 시스템입니다.
private final Handler mHandler = new Handler()
{
//@Override
public void handleMessage(Message msg)
{
switch (msg.what) {
case MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj;
String readMessage = new String(readBuf,0,msg.arg1);
SM += readMessage;
if(readMessage.lastIndexOf('X') !=-1)
{
int indexR = SM.lastIndexOf('R');
int indexX = SM.lastIndexOf('X');
SM = SM.substring(indexR+1, indexX);
int SML = SM.length() / 21;
qlry = new String("123456789012345678901");
for (int z=SML; z>0; z--)
{
dnjsqhs = new String(SM.substring(21*(z-1), 21*z));
if (!dnjsqhs.equals(qlry))
{
mCAA.add(dnjsqhs);
}
}
break;
}
//----------------------------------------------------------------------------------------------------------------------
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private InputStream mmInStream;
public ConnectedThread(BluetoothSocket socket)
{
mmSocket = socket;
try{
mmInStream = new BufferedInputStream(socket.getInputStream());
}catch (IOException e) {}
}
public void run()
{
byte[] buffer = new byte[1024];
int bytes;
while (true) {
try {
bytes = mmInStream.read(buffer);
if (bytes > 0){
mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget();
}
}catch (IOException e) {
break;
}
}
}
};
}
보시면... 스레드 돌면서 데이터가 들어오면...
핸들러이용해서 SM 에 메세지를 모읍니다.
저건 테스트를 할려고 고친 부분인데요
'123456789012345678901' 이 옳바른 메세지이고 그이외의 메세지는 걸러서 리스트 뷰에 표시하도록
해놨는데요...
분명 고의적으로 낸 에러부분 1개빼고 1000번의 전송중...
에러가.. 계속 나는데요...무작위로..어떨땐 4개.. 어떨땐 11개..... 숫자가 하나밀려서.. (123456789011234578901) 이런식으로..
이유가 뭔지.. 알고싶습니다.. 몇일째.. ㅠ.ㅠ 너무 머리 아퍼요...
부탁드립니다 ㅠ.ㅠ




handler 에 읽은 데이터를 넘길 때 배열을 새로 만들어 복사한다음 넘겨보세요.