2012-11-28 88 views
0

我想使用相機捕獲圖像並希望圖像路徑。捕獲圖像時獲取錯誤

我嘗試下面的代碼,但我得到錯誤。 (我沿着這個鏈接Get Path of image from ACTION_IMAGE_CAPTURE Intent

這是我的代碼。

MainActivity.java

public class MainActivity extends Activity { 
private static final int CAMERA_REQUEST = 1888; 
    private ImageView imageView; 
    private Uri mCapturedImageURI; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     this.imageView = (ImageView)this.findViewById(R.id.imageView1); 
     Button photoButton = (Button) this.findViewById(R.id.button1); 
     photoButton.setOnClickListener(new View.OnClickListener() { 



      @Override 
      public void onClick(View v) { 


       String fileName = "temp.jpg"; 
       ContentValues values = new ContentValues(); 
       values.put(MediaStore.Images.Media.TITLE, fileName); 
       mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 
       startActivityForResult(intent, CAMERA_REQUEST); 
      } 
     }); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 

      String[] projection = { MediaStore.Images.Media.DATA}; 
      Cursor cursor = managedQuery(mCapturedImageURI, projection, null, null, null); 
      int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      String capturedImageFilePath = cursor.getString(column_index_data); 

      Toast.makeText(getApplicationContext(), capturedImageFilePath.toString(), Toast.LENGTH_LONG).show(); 

     } 
    } 
} 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="photo" > 
    </Button> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" > 
    </ImageView> 

</LinearLayout> 

的AndroidManifest.xml

<uses-feature android:name="android.hardware.camera"></uses-feature> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

錯誤

java.lang.RuntimeException: Unable to resume activity {com.example.cameraupload/com.example.cameraupload.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=null} to activity {com.example.cameraupload/com.example.cameraupload.MainActivity}: java.lang.NullPointerException 
+0

有什麼錯誤的任何logcat的例外 – SamSPICA

+0

@SamSPICA:?我上傳的代碼錯誤 –

+0

你會找到NullPointerException異常後確切的文件和行號在那裏Exception實際發生了,除非有例外,否則被指向的對象爲null,看看這個對象,看看它是否被正確聲明瞭 – SamSPICA

回答

0

最後我得到了答案。

photoButton.setOnClickListener(新OnClickListener(){

 public void onClick(View v) { 

      File file = new File(Environment.getExternalStorageDirectory()+"/test1.jpg"); 
      Uri outputFileUri = Uri.fromFile(file); 
      Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
      startActivityForResult(intent, 0); 

     } 
    }); 



protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.i("MakeMachine", "requestCode:"+requestCode + ",resultCode: " + resultCode); 

         File file = new File(Environment.getExternalStorageDirectory()+"/test1.jpg"); 
         if(file.exists()){ 
          BitmapFactory.Options options = new BitmapFactory.Options(); 
          options.inSampleSize = 4; 
          picFileName=Environment.getExternalStorageDirectory()+"/test.jpg"; 
          Toast.makeText(getApplicationContext(), picFileName, Toast.LENGTH_LONG).show(); 
          Bitmap bitmap = BitmapFactory.decodeFile(picFileName, options); 
          imageView.setImageBitmap(bitmap); 
          //imageView.setVisibility(View.VISIBLE); 
         } 


    } 
0
if (resultCode != RESULT_CANCELED) { 
    if (requestCode == CAMERA_REQUEST) { 

    String[] projection = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = managedQuery(mCapturedImageURI, projection,     null, null, null); 
       int column_index_data = cursor 
         .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
       cursor.moveToFirst(); 
       String capturedImageFilePath = cursor 
         .getString(column_index_data); 

       Toast.makeText(getApplicationContext(), 
         capturedImageFilePath.toString(), Toast.LENGTH_LONG) 
         .show(); 

      } 
     } 

你試試這個我想他們會幫助你..

+0

否一點都不。還沒有工作 –

+0

你有哪些設備正在測試?@NiravRanpara – QuokMoon

+0

查看我的帖子工作回答我的問題 –