2016-11-28 14 views
0

Вкратце, посмотрите на переменную «str» ниже. Выход из него - это весь результат операции PING.Как отображать результаты ping по строкам в Android (Java)?

reader = new BufferedReader(new InputStreamReader (process.getInputStream())); 
int j; 
char[] buffer = new char[240]; 
StringBuffer output = new StringBuffer(); 
while ((j = reader.read(buffer)) > 0){ 
output.append(buffer, 0, j);} 
str = output.toString(); 
Log.d("1:STR VALUE", str); 
publishProgress(" "+str+" "); 

Переменная «str» содержит весь результат операции, т. Е. 3 пинга на IP-адрес. Тем не менее, я хочу отображать пинги по строкам, один за другим на активность Android, из этой задачи Async.

Кроме того, если кто-то может объяснить ограничения производительности длины массива буфера, который я использую (т. Е. 240 против 120), это было бы здорово.

РЕДАКТИРОВАТЬ-1 (ответ на комментарий):

11-28 18:11:17.404 10769-10815/com.example1 D/1:STR VALUE: PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 
                  64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=8.83 ms 
11-28 18:11:17.600 10769-10815/com.example1 D/1:STR VALUE: PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 
                  64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=8.83 ms 
                  64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=2.05 ms 
11-28 18:11:17.801 10769-10815/com.example1 D/1:STR VALUE: PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 
                  64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=8.83 ms 
                  64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=2.05 ms 
                  64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=3.38 ms 

                  --- 192.168.0.1 ping statistics --- 
                  3 packets transmitted, 3 received, 0% packet loss, time 403ms 
                  rtt min/avg/max/mdev = 2.059/4.758/8.835/2.933 ms 

Пожалуйста, обратите внимание, что, когда значение STR публикуется внутри цикла в то время, повторение вывода происходит.

+0

Не могли бы вы разместить весь код AsyncTask – foxanna

+0

Привет, «процесс» - это процесс выполнения, который получает результаты ping, а переменная «str» публикуется в главном пользовательском интерфейсе с помощью метода onProgressUpdate (String ... values). Я не могу опубликовать весь код по определенным причинам. – Zac1

+0

Ничего. Почему бы вам не использовать 'publishProgress (str);' столько раз, сколько количество пиков, внутри цикла while. И отобразите строки в Activity внутри обработчика onProgressUpdate. – foxanna

ответ

0

Какой результат вы получите, когда попробуете этот кусок кода?

 InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream()); 
     BufferedReader reader = new BufferedReader(inputStreamReader); 
     try { 
      String line; 
      while ((line = reader.readLine()) != null) 
      { 
       Log.d("1:STR VALUE", line); 
       publishProgress(line); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

UPDATE: Данные проводке с publishProgress(line); код будет отправлен в качестве параметра метода onProgressUpdate вашей задачи. Добавьте этот текст в свой TextView.

+0

Когда я это сделал, я получаю результаты ping в журнале. Но ничего в моем пользовательском интерфейсе (текстовое изображение на Android main ничего не имеет). – Zac1

+0

@ Zac1, я обновил ответ – foxanna

+0

Да, я добавил его там вот так - results1.append (line); - однако, приложение вылетает и бросает «java.lang.NullPointerException: пытается вызвать метод интерфейса» int java.lang.CharSequence.length() »в ссылке нулевого объекта на android.widget.TextView.append« [PS: Я изменил строку String; to String line = "";] - до сих пор не повезло. – Zac1