Функция getRuntime (). exec (String []) ведет себя иначе, чем getRuntime (). exec (String) (Android) - PullRequest
1 голос
/ 19 июня 2019

Пытался вызвать ping с некоторыми пользовательскими данными (флаг -p). Поскольку мне нужно было передать параметры, казалось интуитивно понятным использовать перегрузку exec(), которая принимает массив строк. Он продолжал давать сбой, поэтому я попробовал тот же самый ввод, что и одна длинная строка, и теперь все в порядке. Я понятия не имею, в чем проблема, я проверял ввод несколько раз.

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

String sPattern = StringUtils.bytesToHex(sData.getBytes());
sPattern = padHexString(sPattern);
sPattern = "-p " + sPattern.toLowerCase(); // "-p 3132372e302e302e31ffffffffffffff"

// this FAILS
Runtime.getRuntime().exec(new String[]{"/system/bin/ping",
                   "-c 1",
                    "-s 64",
                    sPattern,
                    sReportServer});  


// this WORKS
Runtime.getRuntime().exec("/system/bin/ping -c 1 -s 64 " + 
                          sPattern + " " + sReportServer);  

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

Оба метода должны работать нормально.

1 Ответ

0 голосов
/ 19 июня 2019

Как отметил Карлос Хойбергер, у меня были пробелы в некоторых аргументах, и это вызывало сбой вызова.Я думал соединить переключатель и связанный с ним параметр в одной строке, но это заставляет его заключаться в двойные кавычки.

Надеюсь, это может сэкономить время тому, кто делает то же самое: |

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...