2012-04-09 8 views
1

Ich mache eine Android-Anwendung, die ein Bild von der Kamera nimmt und es dann anzeigt. Ich kann das angeklickte Bild jedoch wahrscheinlich nicht anzeigen, weil onActivityResult() nicht ausgelöst wird.onActivityResult nicht in Android ausgelöst

Hier ist mein Stück Code. Kann mir jemand vorschlagen, was fehlt mir?

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

       } 
      } 




     }); 
    } 
} 

Antwort

1

onActivityResult() muss in Ihrer Aktivitätsklasse (nicht im OnClickListener) deklariert werden. Wenn Sie die "@override" korrigieren ('o' muss großgeschrieben werden), Tippfehler vor Ihrer aktuellen onActivityResult() - Erklärung, werden Sie sehen, was ich meine ...

Siehe die Activity.onActivityResult() documentation.

Hier ist, wie Ihre Klasse sollte wie folgt aussehen:

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

Sollte ich @Override entfernen und die onActivityResult() außerhalb der Aktivitätsklasse? –

+0

Die Annotation \ @Override teilt dem Compiler mit, dass die Funktion, die Sie deklarieren, etwas in der übergeordneten Klasse überschreiben soll. Zurzeit haben Sie einen Tippfehler bei der Eingabe von \ @ Override - o wird nicht großgeschrieben! Daher warnt der Compiler Sie nicht, dass Ihre Überschreibung ungültig ist. Sie sollten onActivityResult direkt in Ihrer Aktivitätsklasse deklarieren. Ich habe meine Antwort aktualisiert ... – hopia

+0

Vielen Dank! Es hat funktioniert: D –

Verwandte Themen