2016-06-21 4 views
4

Ich habe ein Problem mit startActivityForResult/onActivityResult wo Daten Null zurückgibt. Ich benutze startActivityForResult (Kamera) und verwalten, um das Bild auf dem Gerät zu speichern.Android startActivityForResult gibt null zu onActivityResult zurück, wenn die Kamera verwendet

Dies ist das Stück in der Tätigkeit, die die Kamera

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.upload_new_tire); 
    setUpWings(); 

    imageButton.setOnClickListener(new MyCamera(this)); 
} 

protected void onActivityResult(int requestCode,int resultCode, Intent data){ 
    Log.i("request, result Code", String.valueOf(requestCode) + " and " + String.valueOf(resultCode)); 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK && data != null){ 
     Bundle extras = data.getExtras(); 
     Bitmap imageBitmap = (Bitmap)extras.get("data"); 
     imageButton.setImageBitmap(imageBitmap); 
    } 
} 

Dies ist, wo ich startActivityForResult nennen und das Bild einer Datei speichern Dies ist meine onActivityResult Funktion aufruft.

Uri photoURI = FileProvider.getUriForFile(mContext, 
        "autosoftpro.reusedtire.fileprovider", 
        photoFile); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      mContext.startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 

Dies ist die Fehlermeldung, weil 'Intent data' null ist. Ich habe versucht, andere Beiträge zu sehen, die ähnlich sind, aber es nicht geschafft haben, den Grund dafür herauszufinden.

java.lang.RuntimeException: Failure delivering result 
ResultInfo{who=null, request=1, result=-1, data=null} to activity {autosoftpro.reusedtire/autosoftpro.reusedtire.UploadTireActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference 
+0

Sie verwenden unterschiedliche Anforderungscodes. 'REQUEST_IMAGE_CAPTURE' in Ihrem onActivityResult, aber' REQUEST_TAKE_PHOTO' in Ihrer Anfrage. Das heißt, Sie sollten zuerst versuchen, 'if (resultCode! = RESULT_CANCELED)' 'hinzuzufügen, um sicherzustellen, dass Sie eine gültige Antwort haben, mit der Sie arbeiten können. Sie brauchen Ihren Super-Anruf auch nicht, es sei denn, Sie haben einen ausdrücklichen Grund dafür. – zgc7009

+0

Vielen Dank für Ihre Antwort. Sie sind tatsächlich beide gleich 1, und es ging in die Bedingungsschleife, wenn ich die Bedingungsdaten nicht einschließe! = Null –

+0

Ihre Daten sind also tatsächlich null (ist in dem von Ihnen geposteten Fehler offensichtlich). Die einzige Zeit, die passieren sollte, ist, wenn Sie Ihre Anfrage abbrechen (die mit der Prüfung "if (resultCode! = RESULT_CANCELED)" abgefangen werden kann. – zgc7009

Antwort

2

es geschieht, weil 'Intent-Daten' null ist

Wie in the documentation for ACTION_IMAGE_CAPTURE erklärt wird, gibt es zwei Möglichkeiten:

  • Sie umfassen EXTRA_OUTPUT im ACTION_IMAGE_CAPTUREIntent. In diesem Fall erhalten Sie nichts in der Intent an onActivityResult() gelieferten zurückgegeben, aber Sie wissen bereits, wo das Bild sein sollte.

  • Sie enthalten keine EXTRA_OUTPUT, in diesem Fall wird die data extra ein Thumbnail `Bitmap sein.

Du einschließlich EXTRA_OUTPUT, was bedeutet, sollten Sie nicht die data zusätzliche Überprüfung werden. Suchen Sie stattdessen nach dem Bild, das Sie in EXTRA_OUTPUT angegeben haben.

+0

Verpasste den Teil vor meinem Kommentar, 100% richtig. Er erklärte ausdrücklich den URI im Anruf, verwenden Sie ihn einfach: P – zgc7009