[java] 수업 연장시 팽창 오류

GhostSurfaceCameraView확장 되는 사용자 정의보기를 만들려고합니다 SurfaceView. 여기 내 클래스 정의 파일이 있습니다

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에 있습니다.

<com.alpenglow.androcap.GhostSurfaceCameraView android:id="@+id/ghostview_cameraview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"/>

이제 내가 만든 활동에서 :

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, AttributeSet’에 대한 생성자를 제공해야 할 때 하나의 매개 변수 ‘context’의 경우에만 생성자를 제공하고있었습니다. 또한 생성자에게 공개 액세스 권한을 부여해야했습니다. 여기 내 수정이 있습니다.

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 )생성자 만 필요합니다. 나는 몇 시간과 몇 시간을 낭비한 후에 고통스러운 방법을 발견했습니다.

나는 안드로이드 개발에 익숙하지 않지만 여기서 ViewXML 파일에 커스텀 클래스를 추가하고 있기 때문에 XML에서 몇 가지 속성을 설정 하고 있다는 사실 때문에 아마 추측 할 것이다. 인스턴스화시 처리됩니다. 나보다 훨씬 더 많은 지식을 가진 사람이이 문제에 대해 더 명확한 빛을 비출 수있을 것입니다.


답변

“클래스 팽창 오류”메시지의 또 다른 원인은 XML로 지정된 전체 패키지 이름의 철자가 틀릴 수 있습니다.

<com.alpenglow.androcap.GhostSurfaceCameraView android:id="@+id/ghostview_cameraview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

Eclipse XML 편집기에서 레이아웃 XML 파일을 열면이 문제점이 강조 표시됩니다.


답변

xml에 전체 클래스 경로를 작성하는 것이 중요합니다. 하위 클래스의 이름 만 쓰면 ‘클래스 팽창 중 오류’가 발생했습니다.


답변

지난 몇 시간 동안이 오류가 발생했습니다. Android Studio에서 사용자 정의보기 라이브러리를 모듈로 추가했지만 app의 종속성으로 추가하지는 않았습니다 build.gradle.

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


답변

fwiw , 생성자 내에서 null 객체에 액세스하려는 일부 사용자 지정 초기화로 인해이 오류가 발생했습니다.


답변

TextEdit을 확장하는 것과 같은 문제가있었습니다. 나를 위해 실수는 생성자에 “공개”를 추가하지 않았다는 것입니다. 내 경우에는 내가 단 하나의 생성자 인수를 사용하여 하나의 정의 경우에도 작동 Context등을 AttributeSet. 유선 문제는 APK를 빌드하거나 (노래 여부에 관계없이) 버그를 장치에 전송한다는 것입니다. 응용 프로그램이 USB 연결 장치에서 AndroidStudio-> RunApp을 통해 실행되면 응용 프로그램이 작동합니다.