В чем здесь проблема?
Вы получаете NoClassDefFoundError
.Когда это происходит:
Определение класса для поиска существовало, когда был скомпилирован текущий исполняемый класс, но определение больше не может быть найдено.
из документации oracle
Ваш класс или его части были доступны во время компиляции, но больше не доступны во время выполнения.Это происходит, когда ваш проект Android настроен на определенный целевой уровень API и вы используете его доступные классы и методы.Затем вы запускаете этот проект на устройстве с более низкой версией Android (при условии, что ваш minSdk
настроен на это в вашем AndroidManifest - по умолчанию 4 для этого примера проекта) .Неожиданно некоторые из этих компонентов могут быть недоступны¹.Вы получите эту ошибку.
Как это исправить?
Измените целевой проект SDK на версию, которую вы хотите поддерживать.Когда вы это сделаете, вы должны увидеть маркеры ошибок и проблемы с компиляцией в своем инструменте по вашему выбору, например, eclipse.Если вы установите его на 2,2.например, вы увидите, что этот класс использует OnQueryTextListener
, SearchView
и ArrayAdapter.addAll()
(все они представлены в API 11).Они недоступны на устройстве с уровнем API 10 или ниже.Создание обходного пути для этой функции должно решить проблему.В любом случае, учитывая, что это пример кода, следует помнить, что эти методы недоступны.
TL; DR:
В примере проекта используются функции API уровня11, которых нет в пакете совместимости.При выполнении на устройстве с версией ниже 11 эта ошибка выдается.
¹ В этом случае интерфейс OnQueryTextListener