Телефон, подключенный к adb через Wi-Fi, отключается сразу же при отсоединении USB-кабеля [дубликат]

Error Message:
Exception in thread "main" java.lang.NumberFormatException: For input string: "Ace of Clubs"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at set07102.Cards.main(Cards.java:68)
C:\Users\qasim\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1

означает:

There was an error. We try to give you as much information as possible
It was an Exception in main thread. It's called NumberFormatException and has occurred for input "Ace of Clubs".
at line 65th of NumberFormatException.java which is a constructor,
which was invoked from Integer.parseInt() which is in file Integer.java in line 580,
which was invoked from Integer.parseInt() which is in file Integer.java in line 615,
which was invoked from method main in file Cards.java in line 68.

It has resulted in exit code 1

Другими словами, вы попытались разобрать "Ace of Clubs" на int, что Java не может сделать с помощью метода Integer.parseInt. Java предоставила прекрасную стеклу, которая точно определяет, в чем проблема. Инструмент, который вы ищете, является отладчиком и использует контрольные точки, позволит вам проверить состояние вашего приложения в выбранный момент.

Решение может быть следующей логикой в ​​случае вы хотите использовать синтаксический анализ :

if (cards[index].startsWith("Ace")) 
    value = 1;
else if (cards[index].startsWith("King"))
    value = 12;
else if (cards[index].startsWith("Queen"))
    value = 11;
...
else {
    try {
        Integer.parseInt(string.substring(0, cards[index].indexOf(" "))); 
    } catch (NumberFormatException e){
        //something went wrong
    }
}

Что такое Exception в Java?

Исключение - это событие, которое происходит во время выполнения программы, которая нарушает нормальный поток инструкций программы.

blockquote>

- Документация

Конструкторы и использование в Integer#parseInt

static NumberFormatException forInputString(String s) {
    return new NumberFormatException("For input string: \"" + s + "\"");
}

public NumberFormatException (String s) {
    super (s);
}

Они важны для понимания того, как читать стек. Посмотрите, как NumberFormatException выбрано из Integer#parseInt:

if (s == null) {
    throw new NumberFormatException("null");
}

или более поздняя, ​​если формат ввода String s не может быть проанализирован:

throw NumberFormatException.forInputString(s); 

Что такое a NumberFormatException?

Брошено, чтобы указать, что приложение попыталось преобразовать строку в один из числовых типов, но что строка не имеет соответствующего формата.

- Документация

NumberFormatException extends IllegalArgumentException. Он говорит нам, что он более специализирован IllegalArgumentException. Действительно, он используется для выделения того, что, хотя тип аргумента был правильным (String), содержание String не было числовым ( a, b, c, d, e, f считаются цифрами в HEX и являются законными, когда это необходимо ).

Как это исправить? Ну, не уточняй, что он брошен. Хорошо, что его бросили. Есть некоторые вещи, которые вам нужно рассмотреть:

  1. Могу ли я прочитать стек?
  2. Является ли String причиной Exception a null?
  3. Это похоже на число?
  4. Является ли это «моя строка» или пользовательский ввод?
  5. для продолжения

Объявление. 1.

Первая строка сообщения - это информация о том, что произошло Исключение, и вход String, который вызвал проблему. Строка всегда следует : и цитируется ("some text"). Затем вам становится интереснее читать stacktrace с конца, так как первые несколько строк обычно являются конструкторами NumberFormatException, методом парсинга и т. Д. Затем в конце появляется ваш метод, в котором вы сделали ошибку. Будет указано, в каком файле он был вызван и в каком методе. Даже линия будет прикреплена. Вот увидишь. Пример чтения stacktrace выше.

Объявление. 2.

Когда вы видите, что вместо "For input string:" и ввода есть null ( not "null" ), это означает, что вы пытались пройти нулевая ссылка на число. Если вы действительно хотите рассматривать это как 0 или любой другой номер, вы можете быть заинтересованы в моем другом сообщении в StackOverflow. Это доступно здесь .

Описание решения неожиданного null s хорошо описано в потоке StackOverflow Что такое исключение NullPointerException и как его исправить? .

Объявление. 3.

Если String, который следует за : и указанным, выглядит как номер, по вашему мнению, может быть символ, который ваша система не расшифровывает, или невидимое пустое пространство. Очевидно, что " 6" не может быть проанализирован, а "123 " не может. Это из-за пробелов. Но может случиться, что String будет выглядеть как "6", но на самом деле его длина будет больше, чем количество цифр, которые вы можете видеть.

В этом случае я предлагаю использовать отладчик или, по крайней мере, System.out.println и напечатайте длину String, которую вы пытаетесь проанализировать. Если он показывает больше, чем количество цифр, попробуйте передать stringToParse.trim() методу разбора. Если это не сработает, скопируйте всю строку после : и декодируйте ее с помощью онлайн-декодера. Это даст вам коды всех символов.

Существует также один случай, который я недавно нашел на StackOverflow, чтобы вы могли видеть, что ввод выглядит как число, например. "1.86", и он содержит только эти 4 символа, но ошибка все еще существует. Помните, что можно просто анализировать целые числа с # Integer # parseInt #. Для разбора десятичных чисел следует использовать Double#parseDouble.

Другая ситуация заключается в том, что число имеет много цифр. Возможно, он слишком большой или слишком мал, чтобы соответствовать int или long. Вы можете попробовать new BigDecimal().

Объявление. 4.

Наконец, мы подошли к тому месту, в котором мы согласны, что мы не можем избежать ситуаций, когда пользователь вводит «abc» в виде числовой строки. Зачем? Потому что он может. В счастливом случае это потому, что он тестер или просто выродка. В плохом случае это атакующий.

Что я могу сделать сейчас? Ну, Java дает нам try-catch, вы можете сделать следующее:

try {
    i = Integer.parseInt(myString);
} catch (NumberFormatException e) {
    e.printStackTrace();
    //somehow workout the issue with an improper input. It's up to your business logic.
}
0
задан Maximilian Peters 18 October 2016 в 11:10
поделиться

1 ответ

Не убивает adb-connection-by-wifi . Просто перечисления USB влияют на свойства системы sys.usb.*, которые на многих устройствах вызывают перезагрузку adbd независимо от того, используется ли она над USB или tcpip.

Сделайте grep "stop adbd" /init*rc до см., что я имею в виду.

Вы можете либо прокомментировать эти строки stop adbd, либо просто отсоединить USB-кабель до , выполнив команду adb connect.

0
ответ дан Alex P. 18 August 2018 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: