Мне нужно приложение для подключения платы по Wifi. Есть четыре фрагмента, которые, щелкая по каждому, должны написать массив байтов или один байт, а затем прочитать arrayByte.
Сначала я просто читаю arrayBte без записи, и он отлично работает, но, щелкая другие фрагменты, я всегда получаю нулевое значение.
Это мой код:
public class CommsThread extends Thread {
private Socket socket;
private InputStream inputStream;
private OutputStream outputStream;
public CommsThread() {
try {
socket = new Socket(Const.ip, Const.port);
} catch (IOException e) {
e.printStackTrace();
}
InputStream tmpIn = null;
OutputStream tmpOut = null;
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
Log.d("SocketChat", e.getLocalizedMessage());
}
inputStream = tmpIn;
outputStream = tmpOut;
}
public void run() {
while (true) {
try {
byte[] data = new byte[1];
inputStream.read(data);
readData.add(data[0]);
} catch (IOException e) {
}
}
}
public void write(ArrayList<Byte> bytes) {
ArrayList list = new ArrayList();
list.add((byte)0xFE);
for (byte b: bytes)
{
if(b >= 0xFD)
{
list.add((byte)0xFD);
list.add((byte)(b - 0xFD));
}
else
list.add(b);
}
list.add((byte)0xFF);
byte[] listBytes = new byte[list.size()];
for (int i = 0; i < list.size(); i++) {
listBytes[i] = (byte)list.get(i);
}
try {
outputStream.write(listBytes);
} catch (IOException e) {
e.printStackTrace();
}
}
Я использовал этот код в классе asynckTask:
Const.commsThread = new CommsThread();
Const.commsThread.start();
щелкая фрагмент, я вызываю функцию записи:
//for example
sendToServer("5");
public static class WriteToServerTask extends AsyncTask<byte[], Void, Void> {
protected Void doInBackground(byte[]... data) {
ArrayList list = new ArrayList();
list.add((byte)0x05);
Const.commsThread.write(list);
return null;
}
}
public static void sendToServer(String message) {
byte[] theByteArray = message.getBytes();
new WriteToServerTask().execute(theByteArray);
}
Я не получаю сообщение об ошибке, но оно никогда не завершает выполнение функции записи.
Заранее спасибо.