seriud89
29-10-2012, 16:26
Ciao a tutti.
Sto sviluppando una app che permetta l'utilizzo della fotocamera. Tuttavia, essendo sprovvisto di smartphone, non posso provare l'app su un cellulare e quindi sono costretto ad usare l'emulatore, ma, come penso sappiate, l'emulatore č una gran rogna, dato che fotocamera, gps e quantaltro vanno a farsi benedire.
Ora ho prodotto del codice, ma quando viene avviata l'activity della fotocamera, essa termina dandomi una NullPointerException.
Questo č il codice:
import java.io.IOException;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
public class FotocameraActivity extends Activity implements SurfaceHolder.Callback {
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;
private boolean mPreviewRunning;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN );
ImageButton buttonPicture = (ImageButton)findViewById(R.id.buttonScatta);
buttonPicture.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
mCamera.takePicture(null, null, jpegCallback);
}
});
mSurfaceView = (SurfaceView)findViewById(R.id.surfaceViewCamera);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte [] _data, Camera _camera){
mCamera.startPreview();
}
};
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if(mPreviewRunning)
mCamera.stopPreview();
Camera.Parameters par = mCamera.getParameters();
par.setPreviewSize(width, height);
ArrayList<Size> list = (ArrayList<Size>)par.getSupportedPictureSizes();
int picture_width = list.get(list.size() - 1).width;
int picture_height = list.get(list.size() - 1).height;
par.setPictureSize(picture_width, picture_height);
par.setJpegQuality(80);
mCamera.setParameters(par);
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
mPreviewRunning = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera = Camera.open();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
}
}
e questo č il logcat prodotto:
10-29 15:23:18.413: E/AndroidRuntime(287): FATAL EXCEPTION: main
10-29 15:23:18.413: E/AndroidRuntime(287): java.lang.RuntimeException: Unable to start activity ComponentInfo{your.Mobile/your.Mobile.FotocameraActivity}: java.lang.NullPointerException
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.os.Handler.dispatchMessage(Handler.java:99)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.os.Looper.loop(Looper.java:123)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread.main(ActivityThread.java:4627)
10-29 15:23:18.413: E/AndroidRuntime(287): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 15:23:18.413: E/AndroidRuntime(287): at java.lang.reflect.Method.invoke(Method.java:521)
10-29 15:23:18.413: E/AndroidRuntime(287): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-29 15:23:18.413: E/AndroidRuntime(287): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-29 15:23:18.413: E/AndroidRuntime(287): at dalvik.system.NativeStart.main(Native Method)
10-29 15:23:18.413: E/AndroidRuntime(287): Caused by: java.lang.NullPointerException
10-29 15:23:18.413: E/AndroidRuntime(287): at your.Mobile.FotocameraActivity.onCreate(FotocameraActivity.java:33)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
10-29 15:23:18.413: E/AndroidRuntime(287): ... 11 more
Ora io vorrei capire se l'errore prodotto č dato dal fatto che l'emulatore non possa usare la fotocamera e perciņ crasha o č un errore mio, quindi mi devo spulciare il codice e capire cosa ho fatto di sbagliato.
Vi ringrazio tanto per l'aiuto.
Ciao!
Sto sviluppando una app che permetta l'utilizzo della fotocamera. Tuttavia, essendo sprovvisto di smartphone, non posso provare l'app su un cellulare e quindi sono costretto ad usare l'emulatore, ma, come penso sappiate, l'emulatore č una gran rogna, dato che fotocamera, gps e quantaltro vanno a farsi benedire.
Ora ho prodotto del codice, ma quando viene avviata l'activity della fotocamera, essa termina dandomi una NullPointerException.
Questo č il codice:
import java.io.IOException;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
public class FotocameraActivity extends Activity implements SurfaceHolder.Callback {
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;
private boolean mPreviewRunning;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN );
ImageButton buttonPicture = (ImageButton)findViewById(R.id.buttonScatta);
buttonPicture.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
mCamera.takePicture(null, null, jpegCallback);
}
});
mSurfaceView = (SurfaceView)findViewById(R.id.surfaceViewCamera);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte [] _data, Camera _camera){
mCamera.startPreview();
}
};
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if(mPreviewRunning)
mCamera.stopPreview();
Camera.Parameters par = mCamera.getParameters();
par.setPreviewSize(width, height);
ArrayList<Size> list = (ArrayList<Size>)par.getSupportedPictureSizes();
int picture_width = list.get(list.size() - 1).width;
int picture_height = list.get(list.size() - 1).height;
par.setPictureSize(picture_width, picture_height);
par.setJpegQuality(80);
mCamera.setParameters(par);
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
mPreviewRunning = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera = Camera.open();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
}
}
e questo č il logcat prodotto:
10-29 15:23:18.413: E/AndroidRuntime(287): FATAL EXCEPTION: main
10-29 15:23:18.413: E/AndroidRuntime(287): java.lang.RuntimeException: Unable to start activity ComponentInfo{your.Mobile/your.Mobile.FotocameraActivity}: java.lang.NullPointerException
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.os.Handler.dispatchMessage(Handler.java:99)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.os.Looper.loop(Looper.java:123)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread.main(ActivityThread.java:4627)
10-29 15:23:18.413: E/AndroidRuntime(287): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 15:23:18.413: E/AndroidRuntime(287): at java.lang.reflect.Method.invoke(Method.java:521)
10-29 15:23:18.413: E/AndroidRuntime(287): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-29 15:23:18.413: E/AndroidRuntime(287): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-29 15:23:18.413: E/AndroidRuntime(287): at dalvik.system.NativeStart.main(Native Method)
10-29 15:23:18.413: E/AndroidRuntime(287): Caused by: java.lang.NullPointerException
10-29 15:23:18.413: E/AndroidRuntime(287): at your.Mobile.FotocameraActivity.onCreate(FotocameraActivity.java:33)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-29 15:23:18.413: E/AndroidRuntime(287): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
10-29 15:23:18.413: E/AndroidRuntime(287): ... 11 more
Ora io vorrei capire se l'errore prodotto č dato dal fatto che l'emulatore non possa usare la fotocamera e perciņ crasha o č un errore mio, quindi mi devo spulciare il codice e capire cosa ho fatto di sbagliato.
Vi ringrazio tanto per l'aiuto.
Ciao!