2011-07-08 154 views
2

我一直在使用攝像頭在我的Android應用程序應用程序崩潰時,按後退按鈕在Android相機意向

我有保存數據的格式問題,還有就是按鈕拍照用相機,從拍攝的圖像相機將放置在我的表單中的ImageView上。

有關於調用攝像頭的意圖,並把圖像的形式

我的問題是沒有問題的: 在相機應用, 如果我按返回鍵(返回形式)我的應用程序崩潰

爲什麼?

這是對我的按鈕調用攝像頭代碼

btn_takepic.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) {    
     Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 
    } 
}); 

這是我的onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    final EditText et_foto = (EditText) findViewById(R.id.et_foto); 
    if(requestCode == CAMERA_PIC_REQUEST) {   
      Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     ImageView image = (ImageView) findViewById(R.id.imv_foto); 
     image.setImageBitmap(thumbnail); 
     //toastkeun(data.getExtras().get("data").toString()); 
    } 

    super.onActivityResult(requestCode, resultCode, data); 
} 

我在真實設備 測試,這是我的logcat

07-08 16:05:26.187: ERROR/AndroidRuntime(12116): FATAL EXCEPTION: main 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=0, data=null} to activity {com.ngimagrid.nigmago/com.ngimagrid.nigmago.FormAsetTambah}: java.lang.NullPointerException 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3515) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread.access$2800(ActivityThread.java:125) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.os.Looper.loop(Looper.java:123) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at dalvik.system.NativeStart.main(Native Method) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116): Caused by: java.lang.NullPointerException 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at com.ngimagrid.nigmago.FormAsetTambah.onActivityResult(FormAsetTambah.java:246) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.Activity.dispatchActivityResult(Activity.java:3890) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3511) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  ... 11 more 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116): FATAL EXCEPTION: main 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=0, data=null} to activity {com.ngimagrid.nigmago/com.ngimagrid.nigmago.FormAsetTambah}: java.lang.NullPointerException 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3515) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread.access$2800(ActivityThread.java:125) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.os.Looper.loop(Looper.java:123) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at dalvik.system.NativeStart.main(Native Method) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116): Caused by: java.lang.NullPointerException 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at com.ngimagrid.nigmago.FormAsetTambah.onActivityResult(FormAsetTambah.java:246) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.Activity.dispatchActivityResult(Activity.java:3890) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3511) 
07-08 16:05:26.187: ERROR/AndroidRuntime(12116):  ... 11 more 

從這一行,我認爲這是問題...

07-08 16:05:26.187: ERROR/AndroidRuntime(12116): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=0, data=null} to activity {com.ngimagrid.nigmago/com.ngimagrid.nigmago.FormAsetTambah}: java.lang.NullPointerException 

沒有結果返回正確嗎? 如何解決這個問題?

感謝

cmiiw

+0

data.getExtras()。get(「data」); 這條線在各種設備上有一些問題。 http://code.google.com/p/android/issues/detail?id=1480 對於某些設備,數據不隨包返回。我不記得哪些設備。但是,即使您獲得了位圖,分辨率也非常低。 –

回答

3

我不認爲這是從你的應用程序來。你可以嘗試在try/catch塊中包含整個onActivity結果代碼。我認爲你所遇到的是某些手機上的攝像頭錯誤。還嘗試嘗試使用startActivityForResult意圖發送的不同組合。

也總是在做任何事之前檢查結果代碼。如果結果被取消(Activity.RESULT_CANCELED)或OK(Activity.RESULT_OK),你不想做相同的代碼

也有一個錯誤,其結果不在EXTRA_OUTPUT(我認爲它被命名像那樣),但是它是以intent.getData()的Uri形式出現的。額外的輸出是你提供一個路徑在哪裏保存文件和uri返回通常是保存在默認攝像頭位置的圖像。它有點不同,你會看到。

你沒有使用標誌atm,但你應該如果你想圖像的位置作爲結果。搜索堆棧的一些示例代碼的額外。

+1

我用try/catch塊包圍了我的onActivityResult(),當我按下返回按鈕時,它返回java.lang.NullPointerException,所以在catch塊我留下空白,所以應用程序不會崩潰。 感謝:D – Falmesino

+0

如果你不是很熟悉它們,請仔細閱讀一下關於處理異常的一些信息,但是這裏的正確事實上就像我說的檢查結果代碼,如果它是Activity.CANCELED而不是跳過代碼您必須獲取圖像(使用簡單的案例或語句),因此在大多數情況下不會拋出異常。 – DArkO

+0

嘗試在try/catch塊中圍繞整個onActivity結果代碼。這是工作,非常感謝:) –

4

NullPointerException是由您的代碼假設data.getExtras()。get(「data」)將返回某些內容導致的。這是一個完全沒有記錄的參數,在許多(大多數)設備上都會返回null。

如果看起來你試圖得到一個縮略圖,那麼你可以嘗試類似這樣的方法,它試圖從相機意圖的結果中提取一個縮略圖的方式(對我來說) 。

Bitmap thumb; 
if (data.getData() != null) { 
    try { 
     Uri uri = data.getData(); 
     thumb = Images.Thumbnails.getThumbnail(getContentResolver(), Long.parseLong(uri.getLastPathSegment()), Images.Thumbnails.MICRO_KIND, null); 
     } catch (Exception typeNotSupported) { 

     } 
    } 
    if (thumb == null) { 
     thumb = (Bitmap) data.getExtras().get("data"); 
    } 
} 

順便說一句,我認爲還有另一個錯誤 - 你的onActivityResult還應該測試resultCode爲正常 - 如果用戶從相機相信onActivityResult仍會被稱爲取消。

我希望這很有用。

2

是的,你可以通過這種方式處理圖庫或相機或其他任何其他的按鈕。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (resultCode != RESULT_OK) 
    { 
    //Here you can handle,do anything you want 
    } 
//other code 
} 
0

您在談論YouTube視頻我知道,我有同樣的錯誤。

protected void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    try 
    {  
      Button btn = (Button) findViewById(R.id.takePhoto); 
      btn.setOnClickListener(new OnClickListener() 
      { 

       @Override 
       public void onClick(View v) 
       { 
         Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
         startActivityForResult(intent, 0); 
       } 

      }); 
      iv = (ImageView) findViewById(R.id.imageView); 

    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

} 
相關問題