R не может быть решена - ошибка Android

Я видел, как System.Drawing выбрасывает OutOfMemoryExceptions даже тогда, когда его не хватает. Некоторые функции GDI +, по-видимому, просто возвращают глупый код ошибки.

IIRC, вы получите исключение OutOfMemoryException, если попытаетесь использовать LinearGradientBrush для заполнения прямоугольника, ширина или высота которого равна нулю. Могут быть и другие условия, но это основная проблема, с которой мы столкнулись.

В этом случае нет необходимости в try / catch. Просто добавьте оператор if в свой код чертежа и не заполняйте прямоугольник, если ширина или высота равны нулю.

Обновление: согласно комментариям к этот ответ , это также может произойти, если вы попытаетесь загрузить поврежденный файл изображения. Для этого у вас не будет выбора, кроме как попробовать / поймать.

Вероятно, вы можете безопасно вылавливать OutOfMemoryExceptions из GDI +, но как можно меньше блокируйте блоки try. Рассмотрите возможность регистрации исключений, чтобы вы могли анализировать журналы и, когда это возможно, добавлять защитный код. Вы не хотите замаскировать real OutOfMemoryException, но вы не хотите, чтобы глупый код ошибки GDI + также разбивал ваше приложение.

1046
задан 9 revs, 6 users 58% 16 June 2016 в 08:41
поделиться

40 ответов

мой проект включал r.java. в начале, R.layout.main работает нормально, но после добавив некоторого кода, он не работает, и ошибка R.layout.main не может быть решена. в чем проблема?

Посмотрите на свой импорт. Скорее всего, там будет строка:

import android.R;

. В таком случае удалите его, чтобы ваш проект разрешил R не с классом ресурсов Android по умолчанию, а с классом, автоматически сгенерированным из вашей папки / res /.

133
ответ дан 19 December 2019 в 20:19
поделиться

Если кто-то интересен (я мог бы спасать свою жизнь здесь), у меня была ошибка, R.xml ] Не может быть разрешен, немного отличается на проекте GLS. Хмммм. Посмотрев в R.java , я нашел автогенерированный класс, XML.java , (я думаю) не было там.

Решение? Это нужна новая папка в RES : RE \ XML и файл, называемый по умолчанию_Values.xml там. Тогда все было хорошо.

На всякий случай, если у вас нет этого файла, это:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
</PreferenceScreen>
4
ответ дан 19 December 2019 в 20:19
поделиться

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

390
ответ дан 19 December 2019 в 20:19
поделиться

R.java - это файл, который создается плагинами Android Eclipse. при создании вашего приложения. R.java создается в каталоге "gen" . Этот файл создается на основе информации в каталоге "res" . Если вы запустите команду «Проект» -> «Очистить ...» в меню Eclipse , он удалит, а затем повторно создаст файл R.java .

Проблема «R не может быть решена» возникает при изменении имени пакета в файле AndroidManifest.xml . Он использует имя вашего пакета Android для создания подкаталога в каталоге "gen", где хранится файл R.java .

Eclipse может иметь проблемы с чистым запуском, потому что он не понимает, где находится файл R.java , когда вы изменили имя пакета Android .Вы можете либо переименовать подкаталог в gen , чтобы он соответствовал вашему имени нового пакета, либо вы можете изменить имя своего пакета обратно на старое имя . Выполните очистку, а затем измените имя пакета на новое имя , которое хотите. Лучше всего это работает, если вы остановите попытки Eclipse построить , пока вы меняете имя пакета. В меню «Проект» снимите флажок с параметра «Построить автоматически», а также, когда в диалоговом окне «Очистить ...» будет предложено «Начать сборку немедленно» снимите флажок, чтобы он не пытался построить, пока вы меняете имя пакета . После изменения имени вы можете снова включить "Создавать автоматически".

Обратите внимание, что если имя вашего пакета файла AndroidManifest.xml не соответствует имени вашего пакета Java, Eclipse автоматически добавит "import <ваш пакет Android name> .R; " строки во всех ваших файлах .java , которые имеют ссылки на R. Если вы измените имя пакета AndroidManifest.xml , иногда Eclipse не обновить все эти добавленные импорта . В этом случае используйте рефакторинг Eclipse ( ALT + Shift + R ), чтобы изменить оператор импорта в одном из ваших файлов Java на имя вашего нового пакета AndroidManifest.xml . Лучше всего сделать это , когда вы отключили "Автоматическая сборка".

87
ответ дан 19 December 2019 в 20:19
поделиться

Еще одна причина, по которой R.java может не создаваться автоматически, - это наличие таких каталогов, как res / drawable-hdpi , res / drawable-mdpi или res / drawable-ldpi .

1.6+ вроде бы подходят для этих каталогов, но 1.5 они не нужны. Когда я удалил эти каталоги, R.java снова начал автоматически генерироваться для меня.

6
ответ дан 19 December 2019 в 20:19
поделиться

Часто это связано с номером версии MinSDK, который вы указали при создании проекта. Пример:

Если вы хотите, чтобы 2.1 был минимумом, Android 2.1 на самом деле является API уровня 7.

Вы можете понять, о чем я говорю, когда просматриваете загруженный и установленный SDK. Перейдите в место, в которое вы установили SDK (например, C: \ android-sdk-windows ), и откройте папку с именем «platform». Вы увидите что-то вроде «android-7» в списке в виде папки, и если вы откроете этот файл, там будет файл source.properties , который при открытии в текстовом редакторе покажет вам соответствующую версию платформы.

Когда вы создаете проект и должны выбрать API «Build Target», последний столбец в этом списке с именем «API Level» показывает число, которое вы ищете при заполнении параметра MinSDK.

Это, вероятно, одна из наиболее распространенных ошибок, из-за которой файл R.java не создается в Project> gen> packagename> R.java.

5
ответ дан 19 December 2019 в 20:19
поделиться

Я столкнулся с этой проблемой в миллионный раз и понял, что ее вызывает: я создал XML-файл с заглавными буквами в имени. Все ваши имена файлов XML в / res должны соответствовать [a-z0-9 \\ ._] .

15
ответ дан 19 December 2019 в 20:19
поделиться

Удалите main.out.xml . Я новичок в этом и еще не знаю, для чего используется этот файл, но его удаление устранило проблему.

5
ответ дан 19 December 2019 в 20:19
поделиться

После отслеживания этой проблемы я нашел это примечание в документации Android:

http: // source. android.com/source/using-eclipse.html

* Примечание. Eclipse иногда любит добавлять оператор «import android.R» в вверху ваших файлов, использующих ресурсы, особенно когда вы просите Eclipse сортировать или иным образом управлять импортом. Этот вызовет поломку make . Смотреть из-за этого ошибочного импорта операторы и удалите их. *

Просматривая примеры руководств по Android, я часто использовал команду Ctrl + Shift + O для «Организовать импорт» "и сгенерируйте все отсутствующие операторы импорта. Иногда это приводило к неправильному оператору импорта, который скрывал класс R.java , который автоматически создается при сборке.

837
ответ дан 19 December 2019 в 20:19
поделиться

Я изменил android: versionName в файле AndroidManifest.xml с 1.0 на 1.1. Это восстановило мой файл R.java , и я счастлив. Надеюсь, это может кому-нибудь помочь.

3
ответ дан 19 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

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