Ошибка раздувания при расширении classа

Я пытаюсь создать собственное представление GhostSurfaceCameraView которое расширяет SurfaceView . Вот мой файл определения classа

GhostSurfaceCameraView.java :

 public class GhostSurfaceCameraView extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder mHolder; Camera mCamera; GhostSurfaceCameraView(Context context) { super(context); // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceCreated(SurfaceHolder holder) { // The Surface has been created, acquire the camera and tell it where to draw. mCamera = Camera.open(); try { mCamera.setPreviewDisplay(holder); } catch (IOException exception) { mCamera.release(); mCamera = null; // TODO: add more exception handling logic here } } public void surfaceDestroyed(SurfaceHolder holder) { // Surface will be destroyed when we return, so stop the preview. // Because the CameraDevice object is not a shared resource, it's very // important to release it when the activity is paused. mCamera.stopPreview(); mCamera.release(); mCamera = null; } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Now that the size is known, set up the camera parameters and begin // the preview. Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(w, h); parameters.set("orientation", "portrait"); // parameters.setRotation(90); // API 5+ mCamera.setParameters(parameters); mCamera.startPreview(); } } 

И это в моем ghostviewscreen.xml:

  

Теперь в своей деятельности я сделал:

 protected void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); setContentView(R.layout.ghostviewscreen); } } 

Когда setContentView() , генерируется исключение:

 Binary XML file 09-17 22:47:01.958: ERROR/ERROR(337): ERROR IN CODE: android.view.InflateException: Binary XML file line #14: Error inflating class com.alpenglow.androcap.GhostSurfaceCameraView 

Может ли кто-нибудь сказать мне, почему я получаю эту ошибку? Благодарю.

Думаю, я понял, почему это не работает. Я предоставлял только конструктор для случая одного параметра «context», когда я должен был предоставить конструктор для двух параметров «Context, AttributeSet». Мне также нужно было предоставить доступ к конструктору (-ам). Вот мое исправление:

 public class GhostSurfaceCameraView extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder mHolder; Camera mCamera; public GhostSurfaceCameraView(Context context) { super(context); init(); } public GhostSurfaceCameraView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public GhostSurfaceCameraView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } 

@Tim. Оба конструктора не требуются, необходим только конструктор ViewClassName(Context context, AttributeSet attrs ) . Я нашел это болезненным способом, после нескольких часов и часов впустую.

Я очень новичок в разработке Android, но здесь я думаю, что это связано с тем, что, поскольку мы добавляем пользовательский class View в XML-файл, мы устанавливаем ему несколько атрибутов в XML, что необходимо обрабатывать во время создания экземпляра. Кто-то гораздо более осведомленный, чем я, сможет пролить свет на этот вопрос.

Другой возможной причиной сообщения «Ошибка раздувания classа» может быть неправильное обращение к полному имени пакета, где он указан в XML:

  

Открытие XML-файла вашего макета в редакторе Eclipse XML должно подчеркнуть эту проблему.

Важно написать полный путь classа в xml. Я получил «Ошибка раздувания classа», когда было написано только имя подclassа.

В течение последних нескольких часов у меня была эта ошибка. Оказывается, я добавил пользовательский вид lib в качестве модуля в Android Studio, но я забыл добавить его как зависимость в build.gradle приложения.

 dependencies { ... compile project(':gifview') } 

У меня была та же проблема, что и расширение TextEdit. Для меня ошибка заключалась в том, что я не добавлял «public» к конструктору. В моем случае это работает, даже если я определяю только один конструктор, тот, который Context аргументы Context и AttributeSet . Проводная вещь заключается в том, что ошибка обнаруживается только тогда, когда я создаю APK (поет или нет), и я переношу его на устройства. Когда приложение запускается через AndroidStudio -> RunApp на подключенном к USB устройстве, приложение работает.

в моем случае я добавил такой циклический ресурс:

 @drawable/above_shadow 

затем изменено на

 @drawable/other_name 

и это сработало

fwiw , я получил эту ошибку из-за некоторой пользовательской инициализации внутри конструктора, пытающегося получить доступ к нулевому объекту.

В моем случае я скопировал свой class из другого места и сразу не заметил, что это abstract class. Вы не можете раздувать абстрактные classы.

  • Как вы имитируете низкую память в эмуляторе Android?
  • Оберните строку после нескольких слов по-разному в Java
  • Почему class Java должен быть сопоставимым?
  • Изменить фон списка ListView - странное поведение
  • Как читать / писать строки из файла на Android
  • Как установить выбранный элемент Spinner по значению, а не положением?
  • Можно ли изменить цвет текста в строке на несколько цветов в Java?
  • Проверка нулевого - в каком порядке?
  • Как создать кнопку динамически в android?
  • Проверьте, четное или нечетное число
  • Что именно влияет на URLConnection.setDoOutput ()?
  • Давайте будем гением компьютера.