2012-07-18 2 views
-1

Я установил сервер на 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. Как я могу это исправить?

+2

Предположительно, вы * на самом деле * имеете исключение в 'readLine'? Если да, почему бы не дать нам эту информацию? –

+0

Определите «крушение». NB есть нулевая вероятность, что isConnected() вернет false в этой точке кода. – EJP

+0

Можете ли вы объяснить мне об исключениях? я понял, что мое приложение вылетает, когда он не получает ввода. Если я отправлю от arduino ответ «connection_ok» после 2-секундной задержки, он работает нормально, поэтому я пришел к выводу, что иногда ответ так быстр, что мое приложение пропускает он и до сих пор ждет ответа, который никогда не приходит. я прав? Я использовал try и catch, но с предложением сделать что-либо в уловах. –

ответ

0

Попробуйте изменить indexOf("connect") > 0 на indexOf("connect") >= 0.

Или лучше, используйте что-то вроде startsWith (которое возвращает логическое значение) вместо indexOf, если это то, что вы на самом деле имеете в виду.

+0

спасибо, я исправил это, но чем не была моя единственная ошибка .. :) спасибо .. –

Смежные вопросы