2012-08-10 125 views
0

我想從一個活動傳遞位圖或繪製對象到另一個,現在我這樣做:如何將位圖或Drawable從一個活動傳遞給另一個活動?

  EventPhoto photo = (EventPhoto) parent.getItemAtPosition(position); 

      BitmapDrawable test = (BitmapDrawable) photo.getDrawable(); 
      Bitmap bitmap = test.getBitmap(); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 0, baos); 
      byte[] b = baos.toByteArray(); 

      Intent intent = new Intent(EventDetailActivity.this, ImageExpandActivity.class); 
      System.out.println(b.length); //B LENGTH = 908k 
      intent.putExtra("image",b); 
      startActivity(intent); 

我的問題是,當我嘗試使用putExtra,他不發任何異常,什麼都沒有,但不要回應和Android殺死應用程序,爲什麼會發生這種情況? 我在考慮它的大小,因爲當我傳遞一個小圖像時,一切都正常。

我在找,並找到像這樣的幾個解決方案:How to pass bitmap from one activity to another 但我想使用putExtra,任何想法?

感謝

+0

一種可能性是將其保存到SD卡或什麼的,然後傳遞文件的路徑的意圖。但我也希望有人對如何避免這個問題有一個想法。 – Izkata 2012-08-10 20:44:30

+0

從LogCat中發佈堆棧跟蹤,以便關閉您的強制。 – kcoppock 2012-08-10 20:44:47

+1

另請閱讀:http://code.google.com/p/android/issues/detail?id = 5878 – kcoppock 2012-08-10 20:46:36

回答

0

我不會去到光盤(文件,數據庫等),如果你只需要這個數據是暫時的。我會爲你採取同樣的做法。

你有幾個選擇。只要採取適合您應用程序的更好的方法。

  • 公共靜態類,可用於您的代碼。這種傭工時很方便,像管理共享偏好,或者您可能需要在那裏

  • Singleton,這種模式非常類似於以前的一個全球性的一些東西的信息。主要區別在於,在這種情況下,您只有一個類的實例(在靜態中沒有實例,只能訪問變量和方法)。無論何時您需要任何參考實例來處理應用的整個生命週期,此模式都很有用。

  • 擴展應用程序。這比其他兩個更進一步。您的整個生命週期中都有可用的應用程序實例。通常情況下,你可能要管理存在一些其他的東西,比如推,或錯誤通知,服務等Example

相關問題