0

我需要将一个字节数组从一个活动发送到另一个活动。我有这样的事情: 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;
       }
   };

Activity1,在OnActivityResult()我有这个:

 @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();
                        }
        }

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

4

2 回答 2

1

查看 putExtras 的文档:

向意图添加一组扩展数据。键必须包含包前缀,例如应用程序 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);
于 2012-07-12T09:51:33.913 回答
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[].

于 2012-07-13T14:19:55.723 回答