2014-10-17 34 views
0

嘗試從活動返回字節數組時遇到一些麻煩。返回代碼是:bytearray in extra break return

private void returnLocation(byte[] mapImage) { 

    Intent intent = new Intent();  
    intent.putExtra("mapImage", mapImage); 
    setResult(RESULT_OK, intent); 

    finish(); 
} 

編輯:這是我的呼籲,並嘗試接受它的父活動:

.... 
Intent i = new Intent(getActivity(), ChildActivity.class); 
ParentFragment.this.startActivityForResult(i, 255); 
... 

公共無效onActivityResult(INT requestCode,INT發送resultCode,Intent數據傳輸){

if(requestCode == 255) { 
     if(resultCode == Activity.RESULT_OK) {    
      mImage = data.getByteArrayExtra("mapImage");     
     } 
    } 
} 

我在onActiviyResult上有一個斷點,當我嘗試返回一個字節數組時,它從未被擊中。

但是,當試圖返回意圖時,它返回到第一個活動(不是調用它的那個)。我看不到任何在記錄器中出現問題的東西。

如果我將額外值更改爲'5'(整數),則返回正常。

當我試圖傳回一個字節數組時,是否有某些東西丟失?

感謝

+0

請發佈如何在第二個活動 – 2014-10-17 21:21:05

+0

中獲取額外資源雖然這是問題,但它並未在傳遞字節數組時觸及第二個活動。它的確如果一個整數被傳遞。 – ADringer 2014-10-18 06:46:22

+0

,它依靠第二個活動的代碼... – 0699 2014-10-18 07:09:11

回答

1

Android對Bundle的大小有限制,這是Intent在內部使用的限制。如果數據超出捆綁包大小,它將在日誌中顯示ERROR/JavaBinder(7881): !!! FAILED BINDER TRANSACTION !!,但不會拋出異常。

嘗試將字節數組寫入臨時文件並在Intent中傳遞文件名。

+0

太棒了,這就是感謝的問題!圖像太大了。 繼續從你的建議,當我保存圖像到臨時文件,然後立即讀回到父活動的內存中,我擔心沒有關於性能? – ADringer 2014-10-20 11:49:13

+0

這就是我在我的應用程序中所做的:)只要確保**在完成後刪除臨時文件**。 – AesSedai101 2014-10-20 13:52:53

0

我想通您呼叫從一個片段startActivityForResult(I,255)。

而不是調用ParentFragment.this.startActivityForResult(i,255);

你應該調用:startActivityForResult(i,255);

如果上面的方法不起作用,請嘗試以下操作:

既然這樣,你需要重寫活動的onActivityResult(承載您的片段被onActivityResult()的結果)的活動,呼籲super.onActivityResult()在你的片段傳播到未處理結果代碼或所有代碼片段。

+0

'ChildActivity'必須調用finish才能將數據傳回給調用活動。 – AesSedai101 2014-10-20 08:15:12

+1

@ AesSedai101,我很抱歉我以前的回答,我的錯誤。檢查我編輯的答案。 – Akhil 2014-10-20 09:01:02