2013-06-04 2 views
2

Я пытаюсь использовать SurfaceView с камерой. Однако findViewById (R.id.mySurfaceView) возвращает null. Самое забавное, что я использовал этот точный код в MainActivity, который отлично работал. Только когда я включил его в другую деятельность, это получило ошибку (я скопировал все xmls и прочее).SurfaceView findViewById is null

Моя основная деятельность только это:

public class MainActivity extends Activity { 

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

    Intent intent = new Intent(this, CammmActivity.class); 
    startActivity(intent); 
} 
} 

Вот CameraActivity

public class CammmActivity extends Activity implements SurfaceHolder.Callback{ 

Camera camera; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 
boolean previewing = false;; 

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

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

     getWindow().setFormat(PixelFormat.UNKNOWN); 
     surfaceView = (SurfaceView)findViewById(R.id.camerapreview); 
     surfaceHolder = surfaceView.getHolder(); 
     surfaceHolder.addCallback(this); 
     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
int height) { 
// TODO Auto-generated method stub 
if(previewing){ 
camera.stopPreview(); 
previewing = false; 
} 

if (camera != null){ 
try { 
    camera.setPreviewDisplay(surfaceHolder); 
    camera.startPreview(); 
    previewing = true; 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
} 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
// TODO Auto-generated method stub 
camera = Camera.open(); 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
// TODO Auto-generated method stub 
camera.stopPreview(); 
camera.release(); 
camera = null; 
previewing = false; 
} 
} 

XML-:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".CammmActivity" > 

<SurfaceView 
android:id="@+id/camerapreview" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
/> 

</RelativeLayout> 
+1

Вы начинаете деятельность в oncreate деятельности? это пустая трата времени и памяти! – WarrenFaith

+0

@WarrenFaith Я знаю, но вижу мое третье предложение: «Самое смешное, что я использовал этот точный код в MainActivity, который работал нормально. Только когда я включил его в другую активность, он дал ошибку (я скопировал все xmls и прочее). –

ответ

0

Я проверил ваш код он прекрасно работает на моем устройстве. Попробуйте обновить и очистить проект Project -> Clean.

+0

В настоящее время я использую эмулятор Eclipse, но я не думаю, что он вызывает ошибку. Ранее код работал над эмулятором (как я уже говорил выше, когда он был в MainActivity, а не связан с активностью). –

+0

Речь идет не о эмуляторе, я не знаю, сколько опыта у вас есть с Android, но вам нужно часто очищать свой проект. Он избавляется от скомпилированных классов и подталкивает их к компиляции снова. Попробуйте очистить его, я надеюсь, что это сработает, потому что в коде нет ничего плохого. –

+0

Когда я очистил проект, он сказал: «Строительная рабочая область» столкнулась с проблемой. Ошибки произошли во время сборки. Ошибки запускают «Android Resource Manager» в проекте «Предварительный просмотр». java.lang.NullPointerException –

Смежные вопросы