2014-06-17 60 views
2

我想开发拍摄照片的应用程序,然后将其存储在ImageView上,如预览图像。 和我想保存到数据库的uri路径后。我知道如何拍摄照片以及如何将其保存在我的SD卡上,但是如何获取特定图像以将其保存在我的数据库表上或实时创建imageView预览? 这里我的代码:我拍照后如何获得路径?

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) { 

    } 
} 

我的错误:

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) 

回答

0

不知道究竟你的意思,但是这是你如何设置文件路径:

FileOutputStream outStream = new FileOutputStream(path + filename,true); 

所以在你的榜样:

outStream = new FileOutputStream(String.format(myGeneralFolder+"/%d.jpg",(System.currentTimeMillis()))); 

String.format(myGeneralFolder+"/%d.jpg"将我猜的路径。所以将它赋值为变量并使用变量。

继续前进,这样做:

try{  
    String currentPicPath = String.format(myGeneralFolder+"/%d.jpg",(System.currentTimeMillis())); 
     ImageView i = (ImageView)findViewById(R.id.image); 
     Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(currentPicPath).getContent()); 
     i.setImageBitmap(bitmap); 
} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

好运

你的问题也是在这里回答:Android, Make an image at a URL equal to ImageView's image

+0

是的,这是路径。但我不能在imageView上设置此路径。示例 ** String currentPicPath = String.format(myGeneralFolder +“/%d.jpg”,(System.currentTimeMillis())); \t outStream = new FileOutputStream(currentPicPath);outStream.write(data); outStream.close(); uriImage = Uri.parse(currentPicPath); d_image_pre1.setImageURI(uriImage); ** – Matt

+0

您应该通过调试器并跨越currentpucPath并查看路径。调试时的路径是什么? –

+0

/storage/emulated/0/mySalesImages/bikes/1403019198320.jpg – Matt