Dudes, я думаю, что здесь много выстрелов в темноте. В некоторых случаях Clean и Sync Project помогут только после устранения проблемы.
Step1: Итак, перейдите и посмотрите вверху каждого файла, где пакет указан следующим образом pakage="YourURL.YourProject";
и убедитесь, что указан правильный пакет (ваш собственный проект). Вы найдете это в java-файлах и AndroidManifest.xml, и важно, чтобы java-файлы ссылались на правильный пакет, так как этот пакет содержит ресурсы («R»), на которые вы указываете. Если они не совпадают, ошибка не может устранить Symbol R.
Шаг 2: Очистить, синхронизировать, что угодно. Done
Итак, почему это происходит случайно или что я делал неправильно?
Если вы копируете и вставляете код, вы должны обратить пристальное внимание на «package =», как описано выше , Что еще более важно, когда вы вставляете код, он сразу же запускает своего рода отладчик (Извините мой плохой технический термин), чтобы показать вам «предполагаемые ошибки», в котором сразу же принимается во внимание «Неверный пакет», и вы получаете все ошибки. Поэтому, даже если вы сразу исправили нотацию после вставки, отладчик уже обновился. Вот почему «Clean, Sync, Whatever» работает ИНОГДА
Вы не первый, кто попал в знаменитую «задержанную ловушку расширения» (и вы не станете последним)
Вам нужно задержать расширение, если вы хотите использовать переменную, что вы изменен в том же блоке (блок представляет собой последовательность команд в скобках (
и )
)
Отложенные переменные ссылаются на !var!
вместо %var%
Причина в том, что cmd
анализирует код. Полная строка или блок анализируется сразу, заменяя обычные переменные своим значением во время разбора. Отложенные переменные оцениваются во время выполнения.
Две простые партии для демонстрации:
setlocal enabledelayedexpansion
set "var=hello"
if 1==1 (
set "var=world"
echo %var% !var!
)
.
setlocal enabledelayedexpansion
for /L %%i in (1,1,5) do (
echo %random% !random!
)
Примечание: также строка рассматривается как block:
set "var=old"
set "var=new" & echo %var%
с задержкой расширения:
setlocal enabledelayedexpansion
set "var=old"
set "var=new" & echo !var!
Отсроченное расширение по умолчанию отключено в командной строке. Если вам это действительно нужно, вы можете сделать:
cmd /v:on /c "set "var=hello" & echo !var!"
Также есть способ сделать то же самое без задержки расширения (но call
стоит некоторое время, поэтому он медленнее, но если по какой-то причине вы не можете / не хотите использовать замедленное расширение, это альтернатива):
setlocal DISabledelayedexpansion
for /L %%i in (1,1,5) do (
call echo %random% %%random%%
)
Оба метода могут использоваться для отображения переменных типа массива :
setlocal ENabledelayedexpansion
set "num=4"
set "var[%num%]=hello"
echo !var[%num%]!
или
setlocal DISabledelayedexpansion
set "num=4"
set "var[%num%]=hello"
call echo %%var[%num%]%%
(этого часто задают как «переменная, которая содержит другую переменную» или «вложенные переменные»
CALL
и удвоение процентных символов в переменной будет хорошим дополнением к этому ответу. Я часто использую этот вопрос как дубликат для закрытия вопросов. – Squashman 20 June 2018 в 21:49