2012-04-09 15 views
1

私はアンドロイドアプリケーションを作成しています。アンドロイドアプリケーションは、カメラから画像を取得して表示します。しかし、おそらくonActivityResult()がトリガーされていないため、クリックした画像を表示できません。onActivityResultがAndroidで起動しない

ここは私のコードです。誰かが私に何が欠けていると私に示唆できますか?

public class Main extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final int CAMERA_PIC_REQUEST = 1337; 
     Button b = (Button) findViewById(R.id.button1); 
     b.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

      } 
      @override 
      public void onActivityResult(int requestCode, int resultCode, Intent data) { 
       Log.d("Message1", "I reached 2"); 
       //super.onActivityResult(requestCode, resultCode, data); 
       if (requestCode == CAMERA_PIC_REQUEST) { 
        // do something 
        Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
        ImageView image = (ImageView) findViewById(R.id.imageView1); 
        image.setImageBitmap(thumbnail); 

       } 
      } 




     }); 
    } 
} 

答えて

1

onActivityResult()は、あなたのActivityクラスで宣言する必要があります(ないonClickListener内側)。現在のonActivityResult()宣言の前に "@override"( 'o'は大文字にする必要があります)を修正すると、私の言いたいことがわかります。

Activity.onActivityResult() documentationを参照してください。ここで

は、あなたのクラスは、のようになります方法は次のとおりです。

public class Main extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final int CAMERA_PIC_REQUEST = 1337; 
     Button b = (Button) findViewById(R.id.button1); 
     b.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

      } 
     }); 
    } 


    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.d("Message1", "I reached 2"); 
     //super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == CAMERA_PIC_REQUEST) { 
     // do something 
     Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     ImageView image = (ImageView) findViewById(R.id.imageView1); 
     image.setImageBitmap(thumbnail); 
     } 
    } 

} 
+0

私は@Overrideを削除し、Activityクラスの外onActivityResult()を置くべきでしょうか? –

+0

\ @Overrideアノテーションは、宣言する関数が親クラスの何かを上書きする必要があることをコンパイラに指示します。現在のところ、\ @ Override - oは大文字ではありません。したがって、コンパイラは、オーバーライドが無効であることを警告しません。 onActivityResultを宣言して、アクティビティクラスの内部に直接宣言する必要があります。私は私の答えを更新しました... – hopia

+0

ありがとう!それは働いた:D –

関連する問題