Error java lang runtimeexception
Ошибка java.lang.nullpointerexception, как исправить?
Ряд пользователей (да и разработчиков) программных продуктов на языке Java могут столкнуться с ошибкой java.lang.nullpointerexception (сокращённо NPE), при возникновении которой запущенная программа прекращает свою работу. Обычно это связано с некорректно написанным телом какой-либо программы на Java, требуя от разработчиков соответствующих действий для исправления проблемы. В этом материале я расскажу, что это за ошибка, какова её специфика, а также поясню, как исправить ошибку java.lang.nullpointerexception.
Скриншот ошибки NPE
Что это за ошибка java.lang.nullpointerexception
Появление данной ошибки знаменует собой ситуацию, при которой разработчик программы пытается вызвать метод по нулевой ссылке на объект. В тексте сообщения об ошибке система обычно указывает stack trace и номер строки, в которой возникла ошибка, по которым проблему будет легко отследить.
Что в отношении обычных пользователей, то появление ошибки java.lang.nullpointerexception у вас на ПК сигнализирует, что у вас что-то не так с функционалом пакетом Java на вашем компьютере, или что программа (или онлайн-приложение), работающие на Java, функционируют не совсем корректно. Если у вас возникает проблема, при которой Java апплет не загружен, рекомендую изучить материал по ссылке.
Ошибка Java
Как исправить ошибку java.lang.nullpointerexception
Как избавиться от ошибки java.lang.nullpointerexception? Способы борьбы с проблемой можно разделить на две основные группы – для пользователей и для разработчиков.
Для пользователей
Если вы встретились с данной ошибкой во время запуска (или работы) какой-либо программы (особенно это касается java.lang.nullpointerexception minecraft), то рекомендую выполнить следующее:
- Переустановите пакет Java на своём компьютере. Скачать пакет можно, к примеру, вот отсюда;
- Переустановите саму проблемную программу (или удалите проблемное обновление, если ошибка начала появляться после такового);
- Напишите письмо в техническую поддержку программы (или ресурса) с подробным описанием проблемы и ждите ответа, возможно, разработчики скоро пофиксят баг.
- Также, в случае проблем в работе игры Майнкрафт, некоторым пользователям помогло создание новой учётной записи с административными правами, и запуск игры от её имени.
Java ошибка в Майнкрафт
Для разработчиков
Разработчикам стоит обратить внимание на следующее:
- Вызывайте методы equals(), а также equalsIgnoreCase() в известной строке литерала, и избегайте вызова данных методов у неизвестного объекта;
- Вместо toString() используйте valueOf() в ситуации, когда результат равнозначен;
- Применяйте null-безопасные библиотеки и методы;
- Старайтесь избегать возвращения null из метода, лучше возвращайте пустую коллекцию;
- Применяйте аннотации @Nullable и @NotNull;
- Не нужно лишней автоупаковки и автораспаковки в создаваемом вами коде, что приводит к созданию ненужных временных объектов;
- Регламентируйте границы на уровне СУБД;
- Правильно объявляйте соглашения о кодировании и выполняйте их.
Как исправить ошибку java.lang.nullpointerexception?
В этом посте я покажу наглядный пример того, как исправить ошибку исключения Null Pointer (java.lang.nullpointerexception). В Java особое значение null может быть назначено для ссылки на объект и означает, что объект в данный момент указывает неизвестную область данных.
NullPointerException появляется, если программа обращается или получает доступ к объекту, а ссылка на него равна нулю (null).
Это исключение возникает следующих случаях:
- Вызов метода из объекта значения null.
- Доступ или изменение объекта поля null.
- Принимает длину null(если бы это был массив Java).
- Доступ или изменение ячеек объекта null.
- Показывает «0», значение Throwable.
- При попытке синхронизации по нулевому объекту.
NullPointerException является RuntimeException, и, таким образом, компилятор Javac не заставляет вас использовать блок try-catch для соответствующей обработки.
Зачем нам нужно значение null?
Как уже упоминалось, null — это специальное значение, используемое в Java. Это чрезвычайно полезно при кодировании некоторых шаблонов проектирования, таких как Null Object pattern и шаблон Singleton pattern.
Шаблон Singleton обеспечивает создание только одного экземпляра класса, а также направлен на предоставление глобального доступа к объекту.
Например, простой способ создания не более одного экземпляра класса — объявить все его конструкторы как частные, а затем создать открытый метод, который возвращает уникальный экземпляр класса:
В этом примере мы объявляем статический экземпляр класса Singleton. Этот экземпляр инициализируется не более одного раза внутри метода getInstance.
Обратите внимание на использование нулевого значения, которое разрешает создание уникального экземпляра.
Как избежать исключения Null Pointer
Чтобы решить и избежать исключения NullPointerException, убедитесь, что все ваши объекты инициализированы должным образом, прежде чем использовать их.
Когда вы объявляете ссылочную переменную, вы должны создать указатель на объект и убедиться, что указатель не является нулевым, прежде чем запрашивать метод или поле у объекта.
Кроме того, если выдается исключение, используйте информацию, находящуюся в трассировке стека исключения. Трассировка стека выполнения обеспечивается JVM, чтобы включить отладку. Найдите метод и строку, в которой было обнаружено исключение, а затем выясните, какая ссылка равна нулю в этой конкретной строке.
Опишем некоторые методы, которые имеют дело с вышеупомянутым исключением. Однако они не устраняют проблему, и программист всегда должен быть осторожен.
- Сравнение строк с литералами
Очень распространенный случай, выполнения программы включает сравнение между строковой переменной и литералом. Литерал может быть строкой или элементом Enum.
Вместо того, чтобы вызывать метод из нулевого объекта, рассмотрите возможность вызова его из литерала. Например:
Приведенный выше фрагмент кода вызовет исключение NullPointerException. Однако, если мы вызываем метод из литерала, поток выполнения продолжается нормально:
- Проверка аргументов метода
Перед выполнением вашего собственного метода обязательно проверьте его аргументы на наличие нулевых значений.
В противном случае вы можете вызвать исключение IllegalArgumentException.
- Предпочтение метода String.valueOf() вместо of toString()
Когда код вашей программы требует строковое представление объекта, избегайте использования метода toString объекта. Если ссылка вашего объекта равна нулю, генерируется исключение NullPointerException.
Вместо этого рассмотрите возможность использования статического метода String.valueOf, который не выдает никаких исключений и «ноль», если аргумент функции равен нулю.
- Используйте Ternary Operator
Ternary Operator — может быть очень полезным. Оператор имеет вид:
boolean expression ? value1 : value2;
Сначала вычисляется логическое выражение. Если выражение true, то возвращается значение1, в противном случае возвращается значение2. Мы можем использовать Ternary Operator для обработки нулевых указателей следующим образом:
String message = (str == null) ? «» : str.substring(0, 10);
Переменная message будет пустой, если ссылка str равна нулю. В противном случае, если str указывает на фактические данные, в сообщении будут первые 10 символов.
- создайте методы, которые возвращают пустые коллекции вместо нуля.
Очень хорошая техника — создавать методы, которые возвращают пустую коллекцию вместо нулевого значения. Код вашего приложения может перебирать пустую коллекцию и использовать ее методы и поля. Например:
- Воспользуйтесь классом Apache’s StringUtils.
Apache’s Commons Lang – это библиотека, которая предоставляет вспомогательные утилиты для API java.lang, такие как методы манипулирования строками.
Примером класса, который обеспечивает манипулирование String, является StringUtils.java, который спокойно обрабатывает входные строки с нулевым значением.
Вы можете воспользоваться методами: StringUtils.isNotEmpty, StringUtils.IsEmpty и StringUtils.equals, чтобы избежать NullPointerException. Например:
- Используйте методы: contains(), containsKey(), containsValue()
Если в коде вашего приложения используется Maps, рассмотрите возможность использования методов contains, containsKey и containsValue. Например, получить значение определенного ключа после того, как вы проверили его существование на карте:
System.out.println(value.toString()); // В приведенном выше фрагменте мы не проверяем, существует ли на самом деле ключ внутри карты, и поэтому возвращаемое значение может быть нулевым. Самый безопасный способ следующий:
- Проверьте возвращаемое значение внешних методов
На практике очень часто используются внешние библиотеки. Эти библиотеки содержат методы, которые возвращают ссылку. Убедитесь, что возвращаемая ссылка не пуста.
Утверждения очень полезны при тестировании вашего кода и могут использоваться, чтобы избежать выполнения фрагментов кода. Утверждения Java реализуются с помощью ключевого слова assert и выдают AssertionError.
Обратите внимание, что вы должны включить флажок подтверждения JVM, выполнив его с аргументом -ea. В противном случае утверждения будут полностью проигнорированы.
Примером использования утверждений Java является такая версия кода:
Если вы выполните приведенный выше фрагмент кода и передадите пустой аргумент getLength, появится следующее сообщение об ошибке:
Exception in thread «main» java.lang.AssertionError
Также вы можете использовать класс Assert предоставленный средой тестирования jUnit.
Модульные тесты могут быть чрезвычайно полезны при тестировании функциональности и правильности вашего кода. Уделите некоторое время написанию пары тестовых примеров, которые подтверждают, что исключение NullPointerException не возникает.
Существующие безопасные методы NullPointerException
Доступ к статическим членам или методам класса
Когда ваш вы пытаетесь получить доступ к статической переменной или методу класса, даже если ссылка на объект равна нулю, JVM не выдает исключение.
Это связано с тем, что компилятор Java хранит статические методы и поля в специальном месте во время процедуры компиляции. Статические поля и методы связаны не с объектами, а с именем класса.
Несмотря на тот факт, что экземпляр SampleClass равен нулю, метод будет выполнен правильно. Однако, когда речь идет о статических методах или полях, лучше обращаться к ним статическим способом, например, SampleClass.printMessage ().
Оператор instanceof
Оператор instanceof может использоваться, даже если ссылка на объект равна нулю.
Оператор instanceof возвращает false, когда ссылка равна нулю.
В результате, как и ожидалось:
Not an instance of the String class!
Смотрите видео, чтобы стало понятнее.
Средняя оценка / 5. Количество голосов:
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
Ява.ленг.RuntimeException: не удается создать экземпляр activity ComponentInfo
Я пытался запустить пример кода При запуске приложения в эмуляторе Android 1.5 , я получил эти ошибки. У любого есть какой-то намек.
ошибка от LogCat:
Edit Эта ошибка случается с большинством новичков, дело в том, что вы должны добавить все свои действия в файл манифеста.
30 ответов:
это проблема вашего намерения.
пожалуйста, добавьте свой Activity в своем AndroidManifest.xml .
когда вы хотите сделать новую операцию, вы должны зарегистрировать его в AndroidManifest.xml .
в моем случае я забыл добавить библиотеку карт google
кроме того, убедитесь, что вы не пропустили предыдущую точку перед путем активности
возможно, вы пытаетесь найти смотреть перед onCreate() , что является неверным.
есть еще один способ получить java.ленг.RuntimeException: не удается создать экземпляр activity ComponentInfo исключение и это действие, которое вы пытаетесь запустить аннотация. Я сделал эту глупую ошибку один раз, и ее очень легко не заметить.
Это также происходит из-за этой проблемы. Я снял флажки с банок, которые нужно было экспортировать в apk, и то же самое произошло. Пожалуйста, отметьте банки, которые ваше приложение должно запустить.
Я тоже столкнулся с этой проблемой, но немного по-другому. Вот мой сценарий:
- использование ActionBarSherlock в качестве библиотеки
- использование android-поддержка-v4-r7-googlemaps.jar в библиотеке ActionBarSherlock, чтобы я мог использовать «фрагмент карты» в моем основном проекте
- добавил Jar в путь сборки моего основного проекта
- включил в манифестах как проекта библиотеки, так и моего первичный проект (это может быть не нужно в библиотеке?)
- манифест в основном проекте имел правильное определение активности и все соответствующие свойства
- у меня не было абстрактной активности или каких-либо других gotchas, которые я видел в Stack Overflow, относящихся к этой проблеме.
тем не менее, я все еще столкнулся с ошибкой, описанной в исходном сообщении, и не смог заставить ее уйти. Проблема, однако, была немного другой в одно замечание:
- это повлияло только на новую установку приложения на мое устройство. Каждый раз, когда приложение устанавливается в первый раз, я получаю ошибку, предшествующую нескольким «предупреждениям»: не удается разрешить суперкласс FragmentActivity
- эти предупреждения прослеживаются до библиотеки ActionBarSherlock
- приложение будет принудительно закрыть и аварии.
- если я сразу же перестроил и перераспределил приложение, оно отлично работало.
- единственный раз он разбился на совершенно новой установки. Если я удалил приложение, построил и развернул его снова из Eclipse, он рухнет. Сборка / развертывание во второй раз, это будет работать нормально.
Как я это исправил:
- в проекте библиотеки ActionBarSherlock я добавил android-support-v4-r7-googlemaps.Jar в путь сборки
этот шаг сам по себе не исправил проблему
Как только jar был добавлен в путь сборки, у меня был измените порядок на вкладке путь сборки Java > порядок и экспорт-я установил JAR на первый элемент в списке (он был последним после элементов /src и /gen).
затем я перестроил и передислоцировал приложение на свое устройство-он работал, как ожидалось, на новой установке. Просто чтобы быть уверенным, я удалил его снова 2-3 раза и переустановил — все еще работал, как ожидалось.
это может быть полная ошибка новичка, но я провел довольно много времени, копаясь сообщения и мой код, чтобы понять это, поэтому, надеюсь, это может быть полезно кому-то еще. Может быть, не все ситуации исправлены, но в данном конкретном случае это стало решением моей проблемы.
эта ошибка также может быть окончательным признаком глупой ошибки (например, когда я — я имею в виду, кашель, например, когда мой друг, который показал мне свой код однажды), где они пытаются выполнить код вне метода, такого как попытка сделать это:
это может не иметь отношения к фактическому вопросу, но в моем случае я попытался реализовать Kotlin и оставил apply plugin: ‘kotlin-android’ . Ошибка произошла потому, что он не мог распознать MainActivity в качестве .файл КТ.
надеюсь, что это поможет кому-то.
Я избавился от этой проблемы путем удаления Bin и Gen папка из проекта (которая автоматически возвращается, когда проект будет построен), а затем очистка проекта из ->меню -> проект -> очистить.
в моем случае я не поставил setContentView(R.layout.main);
Если вы создаете новый класс не foget, чтобы установить это в on onCreate(Bundle savedInstanceState) метод.
Я сделал эту глупую ошибку несколько раз.
просто очистите свой рабочий проект или перезапустите eclipse. Затем запустите свой проект. это сработает.
для меня, моя строка пакет в AndroidManifest.xml было неверно (скопировано из учебника). Убедитесь, что строка пакета в этом файле совпадает с тем, где находится ваша основная деятельность, например
простой способ сделать это-открыть AndroidManifest.xml-файл на вкладке «манифест» и введите его в текстовое поле рядом с пакетом или используйте кнопку Обзор.
кроме того, строка пакета для моей деятельности была неправильной, например
Я (тупо) получил ту же ошибку несколько недель спустя, когда я переименовал свое имя пакета. Если вы сделаете это, убедитесь, что вы обновить тоже.
хорошо, я довольно опытный на iPhone, но новый для android. Я получил эту проблему, когда у меня было:
эта строка кода выше:
может быть, я лишен сна: P
Я недавно столкнулся с этим со свежей переустановкой Eclipse. Оказывается, мой уровень соответствия компилятора был установлен на Java 1.7, а проект требовал 1.6.
В Eclipse: Проект — > свойства — > компилятор Java — > соответствие JDK
получил эту проблему и исправил ее, установив свойство «режим запуска» действия.
еще одной причиной этой проблемы может быть отсутствие библиотеки.
перейдите в свойства — > Android и проверьте, что вы правильно добавляете библиотеки
У меня была та же проблема, но у меня была объявлена моя активность в файле манифеста с правильным именем.
моя проблема заключалась в том, что мне не нужно было импортировать сторонние библиотеки в папку «libs», и мне нужно было ссылаться на них в моем проекте (щелкните правой кнопкой мыши, Свойства, путь сборки Java, библиотеки, добавить Jar. ).
Это может произойти, если ваш класс активности находится внутри пакета по умолчанию. Я исправил это, переместив класс activity в новый пакет. и изменение манифеста.xml
это происходит со мной довольно часто при использовании NDK. Я обнаружил, что мне необходимо сделать «чистый» в Eclipse после каждого раза, когда я делаю ndk-build . Надеюсь, это поможет кому-нибудь:)
эта ошибка также возникает при использовании ActionBarActivity но присвоено не AppCompat стиль.
чтобы исправить это, просто установите родительский стиль приложения в Theme.AppCompat один такой.:
щелкните правой кнопкой мыши на проекте > свойства > android > и попробуйте с другой версией android ранее я делал с android 4.4, затем я перешел на android 4.3, и это сработало !
у меня была та же проблема (невозможно создать экземпляр Activity) :
таким образом, правильный способ сделать это, сначала откройте камеру, а затем доступ к параметрам.
вторая причина: объявите свою деятельность в файле манифеста
третья причина : Объявите разрешение камеры в файле манифеста.
надеюсь, что это помогает
в моем случае, я пытался вставить Facebook SDK и я был неправ идентификатор приложения; таким образом, ошибка выскакивает. В файле манифеста вы должны иметь соответствующие метаданные:
Если у вас установлена Android Studio 2.3.3 и Android Studio 3.0.0, то переключение между двумя программами для разработки вызовет эту ошибку. Это связано с тем, что существуют ситуации, когда классы, поддерживаемые в одной программе, не поддерживаются другой и наоборот. Важно поддерживать согласованность в том, какая версия Android Studio используется для разработки проекта.
Это случилось со мной, когда я пытался запустить Activity на 2.2, который использовал импорт из Honeycomb, недоступный в более старых версиях Android и не включенный в пакет поддержки v4.
Ваша новая деятельность добавить AndroidManifest.xml как «.NewActivity»
вы должны убедиться, что все действия в вашем приложении правильно определены в AndroidManifest.XML-файл.
кроме того, если они начинаются с пути убедитесь, что этот путь существует.
например, это не будет работать:
Если имя вашего приложения com.example.networkusage (обратите внимание на отсутствие .андроид.)
или еще лучше, не включайте пути при определении действия внутри манифеста. Только поставьте свое имя (с точкой перед он.)
вы можете иметь некоторые ошибки в областях, таких как
поэтому мой совет-выполнить всю инициализацию в методе onCreate не непосредственно в Ваших полях
Это также может произойти, если у вас есть два проекта с одинаковым именем пакета, и вы запустили один из них перед другим, поэтому я думаю, что это смущает Eclipse. Для меня это произошло, когда я скопировал учебник Android в eclipse в том же рабочем пространстве и оставил имена пакетов одинаковыми, но добавил к нему ActionBarSherlock (ABS), например
Так что в моем AndroidManifest.xml-файл, как проект учебника, который был в моей рабочей области, так и скопированный проект учебника, оба имели в качестве пакета строка:
просто измените имя пакета путем рефакторинга (в eclipse щелкните правой кнопкой мыши на пакете на вкладке проводник пакетов > выберите рефрактор > выберите Переименовать. ) а затем изменить его в вашем AndroidManifest.xml-файл и в любом другом месте вам нужно (например, как все ваши .java-файлы)
также, если вы извлекаете что-то из intent другой деятельности с помощью getIntent в текущей деятельности и установка этих полученных данных перед/выше onCreate то это исключение.
например. если я получаю строку, как это
и поставить эту строку кода перед/выше onCreate то это исключение.
Java 8 исключения
Язык программирования Java использует исключения для обработки ошибок и других особых ситуаций.
Исключение (exception)— это событие, которое возникает во время выполнения программы и прерывает нормальный поток выполнения инструкций.
Когда возникает какая-нибудь ошибка внутри метода, метод создаёт специальный объект, называемый объектом-исключением или просто исключением (exception object), который передаётся системе выполнения. Этот объект содержит информацию об ошибке, включая тип ошибки и состояние программы, в котором произошла ошибка. Создание объекта-исключения и передача его системе выполнения называется броском исключения (throwing an exception).
После бросания исключения система пытается найти его обработчик. Система выполнения проходит по стеку вызовов от текущего метода вверх, ища подходящий обработчик исключений.
Выбранный обработчик исключения ловит это исключение.
Если системе не удаётся найти подходящий обработчик исключения, то программа завершает своё выполнение.
В Java все классы-исключения являются наследниками от класса java . lang . Throwable , который в свою очередь имеет подклассы java . lang . Error и java . lang . Exception . Класс java . lang . Exception имеет дочерний класс java . lang . RuntimeException .
Согласно соглашению все бросаемые исключения являются наследниками трёх классов: java . lang . Error , java . lang . Exception или java . lang . RuntimeException . Технически можно бросить исключение, которое не является наследником этих трёх классов, но является наследником java . lang . Throwable , но так делать не принято.
Виды исключений в Java 8
Из описанных выше трёх классов выходит три вида исключений в Java:
- Наследники java . lang . Error . Эти исключения возникают при серьёзных ошибках, после которых невозможно нормальное продолжение выполнения программы. Это могут быть различные сбои аппаратуры и т. д. В обычных ситуациях ваш код не должен перехватывать и обрабатывать этот вид исключений.
- Наследники java . lang . RuntimeException . Это непроверяемый тип исключений вроде выхода за границу массива или строки, попытка обращения к методу на переменной, которая содержит null , неправильное использование API и т. д. В большинстве своём программа не может ожидать подобные ошибки и не может восстановиться после них. Подобные исключения возникают из-за ошибок программиста. Приложения может их перехватывать, но в большинстве случаев имеет гораздо больше смысла исправить ошибку, приводящую к подобным исключениям.
- Наследники java . lang . Exception , которые НЕ являются наследниками java . lang . RuntimeException . Подобный тип исключений называется проверяемыми исключениями (checked exceptions). Это такой тип исключений, который может ожидать хорошо написанная программа, и из которых она может восстановить свой обычный ход выполнения. Это может быть попытка открыть файл, к которому нет доступа, или которого не существует, проблемы с доступом по сети и т. д. Все исключения являются проверяемыми, кроме наследников java . lang . Error и java . lang . RuntimeException . Любой метод, который может бросить проверяемое исключение, должен указать это исключение в клаузе throws . Для любого кода, который может бросить проверяемое исключение, это исключение должно быть указано в throws метода, либо должно быть перехвачено с помощью инструкции try — catch .
android java lang runtimeexception не удается подключиться к службе камеры
в настоящее время я работаю над включением/выключением фонарика. Я получаю эту ошибку java.lang.RuntimeException: Fail to connect to camera service Я не знаю, почему эта ошибка возникает. Я ссылался на многие решения, но моя проблема все еще не была решена. Когда фонарик включен, ошибка не возникает, но когда фонарик выключен, то возникает ошибка.
мое явное разрешение:
12 ответов
объявить его сверху.
У меня была та же проблема, что ни один из ответов здесь не решен, поэтому после ее решения я добавляю свой способ ее решения. Это относится к новым версиям android, которые поддерживают настройку разрешений для каждого приложения (начиная с Marshmallow, 6.0). Разрешение для камеры может быть отключено и должно быть включено в настройках приложения. Настройки — > Приложения — > [Ваше Приложение] — > Разрешения
Я также видел эту ошибку:
java.ленг.RuntimeException: не удается подключиться к службе камеры
экспериментируя с фонариком. Оказывается, я был немного небрежен с моими разрешениями и скопировал их в тело блока приложения в манифесте.XML-файл. Поэтому вам действительно нужно подчиняться синтаксису, как описано в:
в противном случае приложение не будет работать с сбоем подключения службы на камере.открытый призыв. Это должно выглядеть так, основываясь на ваших разрешениях в вопросе:
убедитесь, что ваши разрешения и список функций содержатся только в разделе манифеста, а не похоронены в разделе приложения!
эта проблема может возникнуть в Android 6.0 если вы не включили разрешение камеры для вашего приложения. Начиная с Android 6.0 вы можете обрабатывать разрешение приложения Погода вы дадите или не конкретное разрешение для приложения.
Итак, вам нужно включить разрешение settings->apps->your_app->enable camera permission если он еще не включен.
Если ваша версия ОС 6.0 или более поздней версии попробуйте это, надеюсь, это поможет.
если вы попытаетесь открыть камеру с помощью cameraID, который не существует, вы получите ту же ошибку (java.ленг.RuntimeException: не удается подключиться к службе камеры)
посмотреть код в этом блоке
вызов release() чтобы освободить камеры для использования другими приложениями. Приложения должны немедленно освободить камеру в onPause() (и повторно открыть () его в onResume().
в приведенном выше коде сразу после выпуска вы помещаете null в камера
Привет я надеюсь, что вы имеете дело с факелом своего рода приложение или что-то, связанное с flash, и было много дискуссий пошли на это раньше, и вот некоторые полезные ссылки и учебники для достижения вашей потребности, пожалуйста, пройти через них надеюсь, что они могут помочь вам
простой ответ, который я могу найти на эту проблему, заключается в том, что я не просил разрешения камеры для пользователя, и поэтому по умолчанию разрешение камеры не было доступно для моего приложения на устройствах Marshmallow. Я просто добавил проверку разрешений для камеры перед запуском камеры, и все работает нормально.
попробуйте использовать эту строку, когда вы выходите из приложения:
Я только что получил код приложения фонарик откуда-то. Он использовал System.exit(0) закрыть приложение. Я убрал его, зная, что это не лучшая практика. Затем я начал получать эти ошибки. Я попробовал решение принятого ответа, но затем я начал получать некоторые другие ошибки. Поэтому, вместо того, чтобы решать их, я просто положил это System.exit(0) линия спины. И он начал работать нормально. Я знаю, что это не очень хороший способ, но для небольшого приложения для фонарика вы можете попробовать это быстрое решение.
Если весь ваш код в порядке, вы должны проверить, есть ли какое-либо другое приложение с помощью камеры. Затем вы должны закрыть другое приложение, которое в настоящее время использует вашу камеру.
вам нужно stopPreview() и release() Как только вы вернулись с камеры, так что другое приложение может получить к нему доступ. Сделайте класс» Camera » статическим и назовите его null на onPause() . Это решает мою проблему.
в моем Android peoject имеет ту же проблему. Это моя ошибка Logcat
03-29 19:26:04.194 224-608/? V / EmulatedCamera_BaseCamera: getCameraInfo 03-29 19:26: 04.196 224-224/? I / CameraService: CameraService:: подключение вызова (PID -1 «com.proitzen.staffapp», ID камеры 1) для версии по умолчанию HAL и версии API камеры 1 03-29 19: 26:04.196 224-224/? W / ServiceManager: ошибка разрешения: андроид.разрешение.Камера от uid=10067 pid=1776 03-29 19: 26: 04.196 224-224/? E / CameraService: отказ в разрешении: невозможно использовать камеру pid=1776, uid=10067 03-29 19:26:04.196 1776-1776/com.proitzen.staffapp W / CameraBase: произошла ошибка при подключении к камере 1: сервис недоступно 03-29 19: 26: 04.200 1776-1776 / com.proitzen.staffapp D / AndroidRuntime: завершение работы VM
никакие вышеуказанные решения не работали для меня. Мое приложение для android работало на физических устройствах android и давало вышеуказанную ошибку только в Как Genymotion.
решение: запустите эмулятор Genumotion Настройки — > приложения — — — > выберите приложение — > разрешения — > включить камеру и микрофон и хранение.