簡體   English   中英

在addContentView上的Android- JavaNullPointer

[英]Android- JavaNullPointer on addContentView

我無法設置contentView:

我如何使用此代碼做得更好,我嘗試使用asyncTask類,但返回相同的錯誤。

代碼退出並出現錯誤:此行上的JavaNullPointer addContentView(surface,new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT));

private SurfaceView cameraView;
private String barcodeInfo;
private CameraSource cameraSource;
private Renderer renderer;
private RajawaliSurfaceView surface;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //--------------------------------------------------------

    //--------------------------------------------------------
    cameraView = (SurfaceView) findViewById(R.id.cameraView);
    //barcodeInfo = (TextView) findViewById(R.id.infoTextView);

    BarcodeDetector detector = new BarcodeDetector.Builder(this).setBarcodeFormats(Barcode.QR_CODE).build();
    cameraSource = new CameraSource.Builder(this, detector).setRequestedPreviewSize(640, 480).build();

    cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            try {
                cameraSource.start(cameraView.getHolder());
            } catch (IOException e) {
                Log.e("CAMERA SOURCE", e.getMessage());
            }
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            cameraSource.stop();
        }
    });

    detector.setProcessor(new Detector.Processor<Barcode>() {
        @Override
        public void release() {

        }

        @Override
        public void receiveDetections(Detector.Detections<Barcode> detections) {
            release();
            final SparseArray<Barcode> barcodes = detections.getDetectedItems();
            if (barcodes.size() == 1) {

                MainActivity.this.runOnUiThread(new Runnable() {
                    public void run() {
                        muestraMono();
                    }
                });
            }
        }
    });
}
public void muestraMono(){
    setContentView(R.layout.activity_main);
    RajawaliSurfaceView surface = new RajawaliSurfaceView(this);
    surface.setFrameRate(60.0);
    surface.setRenderMode(IRajawaliSurface.RENDERMODE_WHEN_DIRTY);
    surface.setTransparent(true);
    addContentView(surface, new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT));
    renderer = new Renderer(this);
    surface.setSurfaceRenderer(renderer);
}

E / AndroidRuntime:致命例外:主進程:com.dsinteg.lectorqr,PID:android.opengl.GLSurfaceView.onResume(GLSurfaceView.java:567)上的org.rajawali3d.surface.RajawaliSurfaceView.onResume上的com.dsinteg.lectorqr,PID:2822 java.lang.NullPointerException org.rajawali3d.surface.RajawaliSurfaceView.onAttachedToWindow(RajawaliSurfaceView.java:125)上的RajawaliSurfaceView.java:106)android.view.View.dispatchAttachedToWindow(View.java:12618)上android.view.ViewGroup.addViewInner(ViewGroup.java) :3621)位於android.view.ViewGroup.addView(ViewGroup.java:3435),位於android.view.ViewGroup.addView(ViewGroup.java:3411),位於com.android.internal.policy.impl.PhoneWindow.addContentView(PhoneWindow)。 java:321)at android.app.Activity.addContentView(Activity.java:2016)at com.dsinteg.lectorqr.MainActivity.muestraMono(MainActivity.java:93)at com.dsinteg.lectorqr.MainActivity $ 2 $ 1.run(MainActivity .java:81),位於android.os.Handler.handleCallback(Handler.java:733),位於android.os.Handler.dispatchMessage(Handler.java:95),位於android.os.Loop er.loop(Looper.java:136)at android.app.ActivityThread.main(ActivityThread.java:5336)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke( com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:871)的Method.java:515)dalvik.system處com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)的MethodAndArgsCaller.run .NativeStart.main(本機方法)

嘗試這個,

getWindow().addContentView(surface, new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT));

發生錯誤是因為活動不認識父級。

SetContentView將覆蓋布局,並將其替換為新的布局。 通常,您只想在onCreate執行一次。 您可以做得更多,但是要重新繪制整個布局,因此請嘗試刪除此行

setContentView(R.layout.activity_main);

從您的muestraMono方法中。

更新資料

像這樣創建方法

public void muestraMono(){
    surface = new RajawaliSurfaceView(this); // make RajawaliSurfaceView a class variable
    surface.setFrameRate(60.0);
    surface.setRenderMode(IRajawaliSurface.RENDERMODE_WHEN_DIRTY);
    surface.setTransparent(true);
    addContentView(surface, new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT));
    renderer = new Renderer(this);
    surface.setSurfaceRenderer(renderer);
}

然后在掃描二維碼后在onCreate調用此方法一次又一次調用此方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM