2011-07-08 17 views
2

は私がデータを保存するためのフォームを持っているアプリケーションは、Androidのカメラ意図に戻るボタンを押すと

私のAndroidアプリケーションでカメラを使用して問題を持ってクラッシュ、へのボタンはカメラと撮影した画像からでピクチャーを撮るありカメラは自分のフォームでImageViewに配置されます。 墜落した私のアプリケーション をカメラアプリケーションで、 を私は戻るボタンを押した場合(バックの形に):

は、カメラの意図を呼び出すと、フォーム

私の問題はあるに画像を配置するには何の問題もありません。

なぜですか?

これはこれは私がこれは

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 
私logCatあり、実際のデバイス 上でテストしてる私の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); 
} 

ある

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); 
    } 
}); 

カメラを呼び出して、私のボタンのコードです

この行から、私はそれが問題だと思います...

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 

正しい結果が返されません。 これを修正する方法は?

+0

data.getExtras()。get( "data"); この行にはさまざまなデバイスに問題があります。 http://code.google.com/p/android/issues/detail?id=1480 一部のデバイスでは、データはバンドルとともに返されません。私はちょうどどのデバイスを覚えていません。しかし、ビットマップを取得しても、それは非常に低い解像度です。 –

答えて

3

cmiiw

おかげ

私はこのアプリから来ているとは思いません。 try/catchブロック内でonActivityの結果コード全体を囲むようにすることができます。私はあなたが経験していることは、いくつかの携帯電話のカメラのバグだと思います。 startActivityForResultインテントで送信するエキストラのさまざまな組み合わせを試してみてください。

何かをする前に必ず結果コードをチェックしてください。結果がキャンセルされた場合(Activity.RESULT_CANCELED)またはok(Activity.RESULT_OK)

また、結果がEXTRA_OUTPUTに入っていないバグがあります。そのように)代わりにintent.getData()でUriとして提供されます。余分な出力はファイルを保存する場所を提供しています。通常、uriの戻り値はデフォルトのカメラ位置に保存された画像です。それはあなたが見るように少し異なっています。

フラグatmは使用していませんが、結果として画像の場所を指定する必要があります。エクストラ用のサンプルコードをスタックで検索します。

+1

私は私のonActivityResult()をtry/catchブロックで囲み、バックボタンを押すとjava.lang.NullPointerExceptionが返されたので、catchブロックでは空白のままになりアプリケーションがクラッシュすることはありません。 ありがとう:D – Falmesino

+0

あなたが本当にそれらに精通していない場合は例外を処理する上で少し読んでくださいが、ここで正しいことは実際には私は結果コードをチェックし、それがActivity.CANCELEDならコードをスキップするほとんどの場合例外がスローされないようにイメージを取得する必要があります(単純なcaseまたはif文を使用)。 – 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がOKであることをテストする必要があります - ユーザーは、私は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(); 
    } 

} 
関連する問題