我已经知道如何在活动之间发送图像了。
因为我无法在Eclipse中模拟Android应用程序,每次我想测试它我都要将它安装到我的手机中,所以我不能看到它给我的错误。
正如我之前所说的,当我想要发送时,我在2个活动之间遇到问题,而将图像从“Acceso_Camara”(主要活动)发送到“Visualizar_Imagen”(我希望收到图像的活动)。
在这里,您是我发送图像的代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Intent siguienteActividad = new Intent(this,Visualizar_Imagen.class);
switch(requestCode) {
case REQUEST_IMAGE_CAPTURE:
if (resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap bitmap = (Bitmap) extras.get("Imagen");
ByteArrayOutputStream bs = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 50, bs);
siguienteActividad.putExtra("byteArray", bs.toByteArray());
startActivity(siguienteActividad);
}
break;
case SELECT_PICTURE:
if(resultCode == RESULT_OK && data != null) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
ByteArrayOutputStream bs = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bs);
siguienteActividad.putExtra("byteArray", bs.toByteArray());
startActivity(siguienteActividad);
}
break;
}
}
“REQUEST_IMAGE_CAPTURE”和“SELECT_PICTURE”被设置为“private static final int”并且每个都作为值。
接收活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_visualizar__imagen);
if(getIntent().hasExtra("byteArray")) {
imageView1 = (ImageView) findViewById(R.id.imageView1);
Bitmap bitmap = BitmapFactory.decodeByteArray(getIntent().getByteArrayExtra("byteArray"), 0,
getIntent().getByteArrayExtra("byteArray").length);
imageView1.setImageBitmap(bitmap);
}
}
当我运行应用程序时,它给了我一个错误,说“应用程序停止了”
有什么想法吗?
P.S:我也尝试过不压缩要发送的图像,实际上我没有错误,但是在“Visualizar_Imagen”活动中给出了anthing。
Okey,所以这是给定的错误,似乎没有数据要发送到下一个活动。有任何想法吗?
04-27 18:02:20.730: E/AndroidRuntime(11283): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.example.proyecto/com.example.proyecto.Acceso_Camara}: java.lang.NullPointerException
04-27 18:02:20.730: E/AndroidRuntime(11283): at android.app.ActivityThread.deliverResults(ActivityThread.java:3557)
04-27 18:02:20.730: E/AndroidRuntime(11283): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3600)
04-27 18:02:20.730: E/AndroidRuntime(11283): at android.app.ActivityThread.access$1300(ActivityThread.java:151
答案 0 :(得分:0)
不要直接将Bitmap对象传递给活动,在某些设备上这可能会导致内存不足异常。更好的方法是将位图保存到文件中,并将文件uri传递给活动。让接收活动从文件中读取位图 将位图保存在应用的私人目录中,以便在卸载应用后删除该位图,也无其他应用可以访问该位图。