2013-04-03 34 views
1

我的應用必須製作一張圖片,並在imageview中顯示它。我得到這個工作,但突然間,它不再。捕獲後在ImageView中顯示圖像(android java)

這是我對按鈕的代碼:

public void makeFoto(View v) { 
    Calendar cal = Calendar.getInstance(); 
    File file = new File(Environment.getExternalStorageDirectory(), (subject.getText().toString() + cal.getTimeInMillis()+".jpg")); 
    if (!file.exists()) { 
     try { 
      file.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } else { 
     file.delete(); 
     try { 
      file.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    capturedImageUri = Uri.fromFile(file); 
    Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    photoIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri); 
    startActivityForResult(photoIntent, CAMERA_PHOTO_REQUEST); 
} 

這是我onActivityResult:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == RESULT_OK){ 
     switch(requestCode) { 
     case CAMERA_PHOTO_REQUEST: 
      Uri img = capturedImageUri; 
      imv.setImageURI(img); 
     case CHOOSE_PHOTO_REQUEST: 
      try { 
       Uri selectedImage = data.getData(); 
       InputStream imageStream = getContentResolver().openInputStream(selectedImage); 
       Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream); 
       imv.setImageBitmap(yourSelectedImage); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

正如你看到的,我有兩個結果,一個是採取事先知情同意和一個從選擇PIC畫廊。 這是錯誤我得到:從日誌

04-03 18:16:29.207: E/AndroidRuntime(1478): FATAL EXCEPTION: main 
04-03 18:16:29.207: E/AndroidRuntime(1478): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null} to activity {com.example.icomplain/com.example.icomplain.Home}: java.lang.NullPointerException 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2976) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3019) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at android.app.ActivityThread.access$1100(ActivityThread.java:122) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1176) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at android.os.Looper.loop(Looper.java:137) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at android.app.ActivityThread.main(ActivityThread.java:4340) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at dalvik.system.NativeStart.main(Native Method) 
04-03 18:16:29.207: E/AndroidRuntime(1478): Caused by: java.lang.NullPointerException 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at com.example.icomplain.Home.onActivityResult(Home.java:154) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at android.app.Activity.dispatchActivityResult(Activity.java:4649) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2972) 
04-03 18:16:29.207: E/AndroidRuntime(1478):  ... 11 more 
04-03 18:16:31.478: I/Process(1478): Sending signal. PID: 1478 SIG: 9 
04-03 18:17:36.507: D/dalvikvm(1539): GC_FOR_ALLOC freed 47K, 2% free 14131K/14339K, paused 42ms 
04-03 18:17:36.507: I/dalvikvm-heap(1539): Grow heap (frag case) to 14.868MB for 1048592-byte allocation 
04-03 18:17:36.597: D/dalvikvm(1539): GC_CONCURRENT freed 1K, 2% free 15154K/15431K, paused 4ms+3ms 
04-03 18:17:36.667: D/dalvikvm(1539): GC_FOR_ALLOC freed 0K, 2% free 15154K/15431K, paused 26ms 
04-03 18:17:36.677: I/dalvikvm-heap(1539): Grow heap (frag case) to 16.646MB for 1865972-byte allocation 
04-03 18:17:36.727: D/dalvikvm(1539): GC_CONCURRENT freed 0K, 2% free 16976K/17287K, paused 4ms+3ms 

圖片可查看here

+0

你能記錄捕獲的imageUri的值嗎? –

+0

我認爲你得到的URI null –

+0

日誌上傳... 那麼,如果URI爲空,我應該改變什麼? –

回答

0
  1. 我想你需要break;之前case CHOOSE_PHOTO_REQUEST:
  2. 這是一個可選項,但不幸的是,確定輸出文件名完全取決於相機應用程序安裝在設備上或用戶選擇的內容,即使它在MediaStore.EXTRA_OUTPUT上指定。所以除capturedImageUri之外,您應該看到data.getParcelableExtra(Intent.EXTRA_STREAM)data.getData()
相關問題