不调用onActivityResult

时间:2012-07-12 08:31:26

标签: android android-intent null bytearray

我需要从Activity向另一个Activity发送一个字节数组。我有这样的事情: Activity1 - > Activity2 - > Activity1

在Activity2中我制作了一张照片,我想将byte[] imageData发送到Activity1以显示它。为此,在Activity2中我有:

Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
       public void onPictureTaken(byte[] imageData, Camera c) {

           if (imageData != null) {
               takephoto=1;
               prefsEditor.putInt(TAKEPHOTO, takephoto);
               prefsEditor.commit();

               System.out.println("imageData in TakePHoto"+ imageData);
               Intent mIntent = new Intent();


               Bundle b = new Bundle();
               b.putByteArray("imageData", imageData);

               mIntent.putExtras(b);

               setResult(FOTO_MODE, mIntent);
               finish();

           }
           mCamera.startPreview();
           mPreviewRunning=true;
       }
   };

Activity1OnActivityResult()我有这个:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            takephoto = myPrefs.getInt(TAKEPHOTO,0);
            System.out.println("OnActivityResult"+resultCode);  
                if (resultCode == RESULT_OK )

                        if (takephoto == 1){
                Toast.makeText(this, "11",Toast.LENGTH_SHORT).show();

                                 BitmapFactory.Options options = new BitmapFactory.Options();
                                options.inSampleSize = 3;

                                byte[] imageData = data.getByteArrayExtra("imageData");

                                System.out.println("imageData in Photos"+ imageData );

                                Bitmap myImage = BitmapFactory.decodeByteArray(imageData, 0,
                imageData.length, options);

                                Matrix mat = new Matrix();
                                mat.postRotate(90);
                                bitmapResult = Bitmap.createBitmap(myImage, 0, 0, myImage.getWidth(),
                myImage.getHeight(), mat, true);

                                myadapter.notifyDataSetChanged();
                        }
        }

问题在于Activity1 onActivityResult没有被调用,我看不出我的错误在哪里。我在Netbeans工作,我在Eclipse中测试了这段代码,它运行正常。谁能帮我?

2 个答案:

答案 0 :(得分:1)

查看putExtras的文档:

  

向intent添加一组扩展数据。钥匙必须包括一个   包前缀,例如应用程序com.android.contacts将使用   名称如“com.android.contacts.ShowAll”。

而不是在意图中放置一个包:

Bundle b = new Bundle();
b.putByteArray("imageData", imageData);

mIntent.putExtras(b);

您可以尝试直接使用bytearray:

mIntent.putExtra("imageData", imageData);

为什么不调用onActivityResult:

设置结果时,请使用代码FOTO_MODE:

setResult(FOTO_MODE, mIntent);

但是在onActivityResult中,你检查代码:

resultCode == RESULT_OK 

你应该这样做:

if (resultCode == FOTO_MODE) {
     // then all your stuff of getting data from the intent.
}

而不是使用System.out.println(“OnActivityResult”+ resultCode);
使用:

  Logd.d("Myclass", "OnActivityResult"+resultCode);

答案 1 :(得分:0)

我为我的应用程序找到了一个解决方案(我仍然不明白为什么onActivityResult()没有调用)。在Activity2我说:

String stringData=Base64.encodeToString( imageData, Base64.DEFAULT);
prefsEditor.putString(STRINGDATA, stringData);
prefsEditor.commit();

并在Activity1 imageData SharedPreferences String stringData = myPrefs.getString(STRINGDATA, "stringData"); byte[] imageData = Base64.decode(stringData, Base64.DEFAULT); 如下:

byte[]

并且像这样我可以收到{{1}}。