2015-04-22 27 views
0

我已经知道如何在活动之间发送图像。
因为我无法在Eclipse中模拟Android应用程序,所以每次我想测试它时,都必须将它安装到我的手机中,以便我看不到它返回的错误。错误在活动之间发送位图android

正如我之前所说的,当我想从“Acceso_Camara”(主要活动)发送图像到“Visualizar_Imagen”(我想要接收图像的活动)时,我遇到了2个活动之间的问题。 在这里,你是我没有送形象代码:

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”被设置好的为“私有静态最终诠释”,每个人的价值。
Recieving活动

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:我也试过不压缩图片发送,实际上我没有错误,但在“Visualizar_Imagen”活动中给出了anthing。


欧凯,所以这是给定的错误,似乎没有数据发送到下一个活动。有任何想法吗?

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

将手机插入PC并监控Logcat数据。 – Squonk

+0

如果我没有错,为了监视Logcat数据,Eclipse必须识别我的手机的驱动程序......不是吗?由于我有一个“白色品牌”的手机,Eclipse不识别我的驱动程序,我无法监视Logcat数据。 请纠正我,如果我错了,并感谢您的快速回答 –

+0

转到您的命令shell,键入“adb设备“与你的手机插入。它显示了吗?如果没有,请下载适用于您设备的USB驱动程序。 – Knossos

回答

0

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