2010-12-11 5 views
2


カメラで画像キャプチャを表示する必要があるAndroidアプリケーションを作成しています。 私はエミュレータでテストしたAndroid 2.1を使用しています。私はイメージをキャプチャしようとしていますが、キャプチャしたイメージをスクリーンに表示する方法はありますか?解決方法カメラで画像をキャプチャする際に発生したDATAのヌル問題

public class ImageCaptureActivity extends Activity { 
       /** Called when the activity is first created. */ 
       @Override  
       public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        Uri mImageCaptureUri = Uri.fromFile(new File(
          "/sdcard/gift2.JPG")); 
        Intent intent = new Intent(
          "android.media.action.IMAGE_CAPTURE"); 
        intent.putExtra(
          android.provider.MediaStore.EXTRA_OUTPUT, 
          mImageCaptureUri); 
        startActivityForResult(intent, 0); 
       } 

       protected void onActivityResult(int requestCode, 
         int resultCode, Intent data) { 
        if (requestCode == 0 
          && resultCode == Activity.RESULT_OK) { 
         Toast.makeText(getBaseContext(), "ImageCaptured", 
           Toast.LENGTH_LONG).show(); 
         Uri chosenImageUri = data.getData(); 
         Bitmap mBitmap = null; 
         try { 
          mBitmap = Media.getBitmap(
            this.getContentResolver(), 
            chosenImageUri); 
         } catch (FileNotFoundException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         ImageView img = new ImageView(this); 
         img.setImageBitmap(mBitmap); 
         setContentView(img); 
        } 
       } 

を、私はこのクラスを実行すると、以下のよう
私の活動があります。カメラで画像をキャプチャして「OK」をクリックすると、「Uri chosenImageUri = data.getData();」という文でNULLポインタ例外が発生します。
誰でもこの問題のソートに手伝ってもらえますか?


ありがとうございました。

+0

をはい、私の疑問は、誰もがこの問題のPLZの解決に私を助けることができるデータがnullである理由 –

+0

のですか? –

+0

あなたが既にデータがnullであったことを知っていて、なぜ疑問があるのであれば、そこから生じるヌルポインタ例外についてではなく、その質問に答えるべきでした。 –

答えて

0

はい、私のアプリではIntentはいつもnullですと確認しています。しかし、私は理由を知らない。事実だけの声明。

カメラに画像パスを渡すので、onActivityResult()には、渡されたパスのファイルを読み書きできます。​​にそのパスを維持するだけです。うまくいけば、how to keepActivityの状態を知っているといいでしょう。

+0

ですから、Imageをカメラにインテントとして渡してインテントを通して取得して表示する方法はありますか? –

-1

"Uri chosenImageUri = data.getData();"ステートメントでNULLポインタ例外が発生しました。

これは、データがnullで、そのメソッドの1つを呼び出そうとしているためです。

メソッドを呼び出す前にオブジェクトがnullでないことを確認します。

+0

データがコールバック関数のパラメータなので、なぜデータがヌルなのかを聞いているかもしれないと思います。 – Kratz

+0

はい私の疑問は、データがnullである理由です –

4

私は同じ問題を抱えていました。まあ、それは同じソースではないかもしれないが、私は同じ結果を持っていた。
この問題の原因は、アンドロイドが「android.media.action.IMAGE_CAPTURE」アクティビティが開始されたとき(カメラが見ているものを見始めたとき)、携帯の向きをLANDSCAPE ...(魔法使いはデフォルトのカメラ撮影向きです - 私はAVDが風景をシミュレートしていると推測しています)。ええ、それはかなり頭痛の原因でした!
写真を撮るために携帯電話をポートレートに置いていた場合、バグは表示されませんでした(有効なURIを持っていました^^)。
だから、簡単な修正は、マニフェストに次のコードを追加しました:(あなたの場合「ImageCaptureActivity」で)「android.media.action.IMAGE_CAPTURE」の活動を開始した活動のためにそれを貼り付け

android:configChanges="keyboardHidden|orientation" 


それはそれを修正しました(そして、私はあなたのためにそれを望みます - それが遅すぎないならば)!

+1

他の多くのケースがあります(フォントサイズやロケールの変更など、他のタイプの設定変更など)、画像処理のために空きRAMを増やすためにカメラアプリがフォアグラウンドにある間にOSが単純に目に見えないアクティビティを削除することがあります。正しい方法は、組み込みのアクティビティ状態トラッキングメカニズムを使用することです。http://developer.android.com/training/basics/activity-lifecycle/recreating.html –

0

あなたは、あなたが、これはヌルデータの@ activityresultを返す、ということに注意しなければならない

intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri); 

を言うことによってウリを(私はカメラから画像を作成するために、パスを意味する)、合格! あなたはデータに何も得られません。むしろ、作成中に提供したパスで直接画像にアクセスすることができます。

は参照してください:Android Camera : data intent returns null

関連する問題