Как отобразить вывод скрипта bash в textview в виде списка в Java?

#java #android

#java #Android

Вопрос:

Я использую этот код для выполнения команд bash, и все в порядке, потому что при его выполнении отображаемый вывод отображается как абзац, а не список. До того, как он был без разделения строк, я пытался разделить строки, поэтому ниже приведен мой результат, и это мой код:

 String[] cmdline = { "sh", "-c", "ls /storage/emulated/0/" }; 
    
try {
    java.lang.Process process = Runtime.getRuntime().exec(cmdline);
    BufferedReader bufferedReader = new BufferedReader(
            new InputStreamReader(process.getInputStream()));
    StringBuilder result = new StringBuilder();
    String linee = "";
    while ((linee = bufferedReader.readLine()) != null) {
        int count = 1;
        String[] lines = linee.split("\r?\n");
    
        for (String line : lines) {
            result.append("line "   count     " : "   line);
        }
    }
    TextView tv = (TextView) findViewById(R.id.textview1);
    tv.setText(result.toString());
    
} catch (Exception s) {
    finishAffinity();
}
  

Это вывод:

введите описание изображения здесь

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

Ответ №1:

Во-первых: BufferedReader.readLine() возвращает одну строку текста без разрыва строки, поэтому

 String[] lines = linee.split("\r?\n");
  

всегда возвращает массив длиной 1, содержащий linee . Вы должны удалить этот код.


Во-вторых: ваш счетчик строк count сбрасывается на 1 после каждого чтения строки, поэтому ваш вывод всегда будет содержать «строка 1:», независимо от того, сколько строк вы прочитали.

Переместите эту переменную count за пределы while цикла, чтобы исправить это.


В-третьих: вы добавляете строки result без разрывов строк между ними, поэтому все, что вы получаете, — это один абзац.

Добавьте символ разрыва строки (» n»), чтобы исправить это.


В итоге центральная часть вашего кода должна выглядеть так:

 StringBuilder result=new StringBuilder();
String line;
int count = 1;
while ((line = bufferedReader.readLine()) != null) {
    result.append("line "   (count  )   " : "   line   "n");
}