在活动android之间发送位图时出错

时间:2015-04-22 18:31:18

标签: android android-activity bitmap

我已经知道如何在活动之间发送图像了。
因为我无法在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

1 个答案:

答案 0 :(得分:0)

不要直接将Bitmap对象传递给活动,在某些设备上这可能会导致内存不足异常。更好的方法是将位图保存到文件中,并将文件uri传递给活动。让接收活动从文件中读取位图     将位图保存在应用的私人目录中,以便在卸载应用后删除该位图,也无其他应用可以访问该位图。