NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Ваши ошибки не имеют ничего общего с adb
. Вам просто не хватает понимания того, как ваша локальная оболочка обрабатывает вашу команду. Вы выполняете эти команды локально (на вашем ПК):
adb shell setprop persist.sys.language fr
setprop persist.sys.country CA
stop
sleep 5
start
и сообщения об ошибках, которые вы видите, из локальной оболочки (т. Е. В вашей системе нет исполняемого файла setprop
и start
и stop
имеют необязательные параметры.
правильная команда будет
adb shell "setprop persist.sys.language fr; setprop persist.sys.country CA; setprop ctl.restart zygote"
или в более поздних версиях Android:
adb shell "setprop persist.sys.locale fr-CA; setprop ctl.restart zygote"
Вы можете изменить язык / язык для целей тестирования без укорачивания устройства, а также на более новых (4.2+) устройствах. Вы должны создать приложение, которое изменяет локаль устройства . Или вы можете использовать вспомогательное приложение, например. Изменить язык АБР .
Затем, на устройствах с более высокой скоростью, вы должны использовать предоставление разрешения CHANGE_CONFIGURATION через adb, adb shell pm grant <package_name> android.permission.CHANGE_CONFIGURATION
.
Наконец, вы можете использовать команды adb (активность запуска) для переключения локаль.
Вы не можете сделать это с помощью adb на своем устройстве. Ваш adb вне устройства, я имею в виду на вашем компьютере, подключенном к usb, может изменить его с передачей разрешения перед изменением языка.
На вашем устройстве напрямую требуется корневое устройство.
Попробуйте это
adb shell "su -c 'setprop persist.sys.language fr; setprop persist.sys.country CA; stop; sleep 5; start'
Вам понадобится корневое устройство.
Выполните следующие шаги:
adb root
adb
: adb -e shell "su root; setprop persist.sys.locale pt-PT; stop; sleep 2; start”
, затем выйдите из оболочки, которая перезапускает эмулятор. de_DE
en_EN
fr_FR
ko_KO
pt_PT
es_ES
ja_JA
Это повсюду, если просто
setprop будет работать только на AVD или корневом физическом устройстве
. Альтернативой является использование настроек в Launcher .
Укорененное устройство или AVD это работает:
<android-sdk path>/platform-tools/adb shell
root@generic:/ # getprop persist.sys.language
getprop persist.sys.language
en
root@generic:/ # setprop persist.sys.language fr
setprop persist.sys.language fr
root@generic:/ # setprop persist.sys.country CA
setprop persist.sys.country CA
root@generic:/ # stop
stop
root@generic:/ # start
start
root@generic:/ # sleep 5
sleep 5
root@generic:/ # getprop |grep lang
getprop |grep lang
[persist.sys.language]: [fr]
root@generic:/ # getprop |grep country
getprop |grep country
[persist.sys.country]: [CA]
root@generic:/ #
Для Android M или новее вам нужно использовать:
setprop ro.product.locale xx-XX
setprop persist.sys.locale xx-XX
xx - это язык, XX - страна
adb shell
.
– spaaarky21
2 November 2017 в 00:21
Решение сделать это без укоренения. Вы можете использовать что-то вроде этой функции ниже. Функция переходит в настройки и использует пользовательский интерфейс для изменения настроек локали.
Трудная часть состоит в том, чтобы перейти на правильный язык, когда вы находитесь на другом языке. Вы считаете, что язык всегда поддерживает тот же самый индекс в списке, но, к сожалению, нет. Поэтому у вас должно быть такое решение.
Con: Вы должны немного настроить его для обработки разных телефонов, настройки могут иметь другой порядок.
root
. Я просто объяснил наиболее очевидную ошибку – Alex P. 11 February 2014 в 23:31