我需要从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;
}
};
在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();
}
}
问题在于Activity1
onActivityResult
没有被调用,我看不出我的错误在哪里。我在Netbeans工作,我在Eclipse中测试了这段代码,它运行正常。谁能帮我?
答案 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}}。