2015-04-22 57 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傳遞給活動。讓接收活動從文件讀取位圖。
將位圖保存在應用程序的專用目錄中,以便在卸載應用程序時將其刪除,並且其他應用程序也無法訪問它。