I want to develop app that take a picture and then store it on a ImageView like a preview image. and after i want to save the uri path to a dataBase . i know how to take a picture and how to save it on my sd Card but how can i get the specific image to save it on my database table or to create a preview on imageView real time ? here my code:
public class Add_item extends Activity
implements SurfaceHolder.Callback , OnClickListener {
EditText d_edName,d_edPrice,d_edInfo;
ImageView d_image_pre1,d_image_pre2,d_image_pre3;
Button d_BTakePicture, d_bSave;
Camera camera;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private PictureCallback rawCallback;
private ShutterCallback shutterCallback;
private PictureCallback jpegCallback;
private String tag;
private File myGeneralFolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_additem);
d_edName = (EditText) findViewById(R.id.d_name);
d_edPrice = (EditText) findViewById(R.id.d_price);
d_edInfo = (EditText)findViewById(R.id.d_info);
d_image_pre1 = (ImageView) findViewById(R.id.d_image1);
d_image_pre2 = (ImageView) findViewById(R.id.d_image2);
d_image_pre3 = (ImageView) findViewById(R.id.d_image3);
d_BTakePicture = (Button) findViewById(R.id.d_bTakePicture);
d_BTakePicture.setOnClickListener(this);
d_bSave = (Button) findViewById(R.id.d_bSave);
d_bSave.setOnClickListener(this);
surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.d("Log", "onPictureTaken - raw");
}
};
shutterCallback = new ShutterCallback() {
public void onShutter() {
Log.i("Log", "onShutter'd");
}
};
jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(String.format(myGeneralFolder+"/%d.jpg",(System.currentTimeMillis())));
outStream.write(data);
outStream.close();
Log.d("Log", "onPictureTaken - wrote bytes: " + data.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
Log.d("Log", "onPictureTaken - jpeg");
}
};
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.d_bSave:
String name = d_edName.getText().toString();
String price = d_edPrice.getText().toString();
String info = d_edInfo.getText().toString();
Handler hand = new Handler(Add_item.this);
hand.open();
hand.addItem(new Item(0, name, info, "", price));
hand.close();
start_camera();
break;
case R.id.d_bTakePicture:
if(d_edName.getText().toString().equals("")){
Toast.makeText(Add_item.this, "No item name, folder cannot created!", 2000).show();
}else{
myGeneralFolder = new File(Environment.getExternalStorageDirectory()+File.separator+"mySalesImages"+File.separator+d_edName.getText().toString());
myGeneralFolder.mkdirs();
captureImage();
}
break;
default:
break;
}
}
private void start_camera()
{
try{
camera = Camera.open();
}catch(RuntimeException e){
Log.e(tag, "init_camera: " + e);
return;
}
Camera.Parameters param;
param = camera.getParameters();
//modify parameter
param.setPreviewFrameRate(20);
param.setPreviewSize(176, 144);
camera.setParameters(param);
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
//camera.takePicture(shutter, raw, jpeg)
} catch (Exception e) {
Log.e(tag, "init_camera: " + e);
return;
}
}
private void stop_camera()
{
camera.stopPreview();
camera.release();
}
private void captureImage() {
// TODO Auto-generated method stub
camera.takePicture(shutterCallback, rawCallback, jpegCallback);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
My error:
06-17 19:12:32.416: W/System.err(23714): java.net.MalformedURLException: Protocol not found: /storage/emulated/0/mySalesImages/hggg/1403021552392.jpg
06-17 19:12:32.426: W/System.err(23714): at java.net.URL.<init>(URL.java:178)
06-17 19:12:32.426: W/System.err(23714): at java.net.URL.<init>(URL.java:127)
06-17 19:12:32.426: W/System.err(23714): at com.example.ordersapp.Add_item$3.onPictureTaken(Add_item.java:115)
06-17 19:12:32.426: W/System.err(23714): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:851)
06-17 19:12:32.426: W/System.err(23714): at android.os.Handler.dispatchMessage(Handler.java:99)
06-17 19:12:32.426: W/System.err(23714): at android.os.Looper.loop(Looper.java:137)
06-17 19:12:32.426: W/System.err(23714): at android.app.ActivityThread.main(ActivityThread.java:5419)
06-17 19:12:32.426: W/System.err(23714): at java.lang.reflect.Method.invokeNative(Native Method)
06-17 19:12:32.426: W/System.err(23714): at java.lang.reflect.Method.invoke(Method.java:525)
06-17 19:12:32.426: W/System.err(23714): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
06-17 19:12:32.426: W/System.err(23714): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
06-17 19:12:32.426: W/System.err(23714): at dalvik.system.NativeStart.main(Native Method)