2015-12-16 52 views
0

我想點擊Activity 1中的一個按鈕並顯示圖片Activity 2,但它不起作用。如何在Android中的活動之間傳遞圖像?

活動1:

Intent intent = new Intent(MainActivity.this, Main2Activity.class); 
// Bundle bundle = new Bundle(); 
Drawable drawable=img1.getDrawable(); 
Bitmap bitmap= ((BitmapDrawable)drawable).getBitmap(); 

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
byte[] b = baos.toByteArray(); 

intent.putExtra("picture", b); 
// String ten = edt.getText().toString(); 
// bundle.putString("tenkh", ten); 
// intent.putExtras(bundle); 

startActivity(intent); 

活性2:

ImageView image = (ImageView) findViewById(R.id.img2); 
TextView txtTen= (TextView) findViewById(R.id.tv1); 
Intent goiIntent=getIntent(); 
Bundle extras = goiIntent.getExtras(); 
byte[] b = extras.getByteArray("picture"); 
Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length); 
image.setImageBitmap(bmp); 
+0

的[我如何通過Android上的活動之間的數據?(可能的複製http://stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-on- android) – Tim

回答

1

你應該告訴我們的邏輯來幫助我們理解這個問題。

但是我認爲你的問題是byte []是爲了傳遞一個意圖。

一種解決方法可能是具有類型爲byte[]的公共靜態字段的抽象類。在廣播您的意圖之前,請在您的數據中設置此字段,並在下一個活動中讀取此數據,並且不要忘記在不需要內存泄漏時將字段設置爲null。啓動意圖之前

public abstract class ImageHelper { 
    public static byte [] image; 
} 

在您的活動1,而不是intent.putExtra("picture", b);使用ImageHelper.image = b;

然後在你的活動2,而不是byte[] b = extras.getByteArray("picture");,您可以使用:

創建一個類ImageHelper如下byte[] b = ImageHelper.image;

+0

我無法顯示活動1到活動2的圖像,你能給我解決方案嗎? –

+0

我編輯我的問題,添加一些代碼 – sonic

+0

感謝它的工作 –

0
Activity 1 
intent.putExtra("BitmapImage", bitmap); 

Activity 2 
Intent intent = getIntent(); 
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage"); 
ImageView image = (ImageView) findViewById(R.id.img2); 
image.setImageBitmap(bitmap); 
+1

我不會建議在意圖中傳遞位圖,因爲它非常昂貴。相反,傳遞URI或任何其他位置機制(文件路徑等)。有1MB的未記錄限制已經被其他開發者測試過,並且無論如何Google都不鼓勵使用額外功能:https://code.google.com/p/android/issues/detail?id = 5878 – fasteque

相關問題