Я установил сервер на Arduino Leonardo с использованием Ethernet shield. Через соединение сокета я могу отправить строки из моего приложения Android в свой Arduino, который я могу успешно прочитать. Часть моего Arduino код:Android - readLine(); сбой моего приложения
if (client.available() > 0) {
char thisChar = client.read();
if (readString.length() < 30){
readString.concat(thisChar);
}
if (thisChar == '\n') {
if (readString.indexOf("connect") > 0) {
client.print("connection_ok");
}
if (readString.indexOf("change") >= 0) {
changeLedState(); // Set the LED on
}
}
}
Хотя мой Android код:
Socket s = new Socket("192.168.0.177",23);
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
if (s.isConnected()){
out.println("connect\n");
BufferedReader r = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = r.readLine();
}
Мой Android приложение всегда падает на readLine();
. Если я использую out.print ("change");
, changeLedState действительно происходит, поэтому я знаю, что могу читать выходные строки из своего приложения для Android, но мне не удалось прочитать входные строки от Arduino до Android. Как я могу это исправить?
Предположительно, вы * на самом деле * имеете исключение в 'readLine'? Если да, почему бы не дать нам эту информацию? –
Определите «крушение». NB есть нулевая вероятность, что isConnected() вернет false в этой точке кода. – EJP
Можете ли вы объяснить мне об исключениях? я понял, что мое приложение вылетает, когда он не получает ввода. Если я отправлю от arduino ответ «connection_ok» после 2-секундной задержки, он работает нормально, поэтому я пришел к выводу, что иногда ответ так быстр, что мое приложение пропускает он и до сих пор ждет ответа, который никогда не приходит. я прав? Я использовал try и catch, но с предложением сделать что-либо в уловах. –