Android activity 传递大数据 如bitmap,怎么实现啊,我的老是报错

菜鸟刘 发布于 2016/05/21 11:53
阅读 952
收藏 0

a activity 中部分代码:

Bitmap bmp = ((BitmapDrawable) headerImage.getDrawable()).getBitmap();
Intent intent = new Intent(MainActivity.this, BigHeaderImage.class);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos); byte[] bitmapByte = baos.toByteArray();
ByteArrayInputStream isBm = new ByteArrayInputStream(bitmapByte);
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);
intent.putExtra("bitmap",bitmap);
startActivity(intent);
activity 中部分代码:

    headerImage = (ImageView) findViewById(R.id.change_headerImage);
        Intent intent = getIntent(); 
if (intent != null) {
 bis = intent.getByteArrayExtra("bitmap"); //        
 bitmap = BitmapFactory.decodeByteArray(bis, 0, bis.length); bp=bitmap;
            Display display = getWindowManager().getDefaultDisplay(); 
int width = bp.getWidth(); int height = bp.getHeight(); int w = display.getWidth(); int h = display.getHeight(); 
scaleWidth = ((float) w) / width; scaleHeight = ((float) h) / height; 
headerImage.setImageBitmap(bp); 
headerImage.invalidate();
        }

报告的错误:E/AndroidRuntime: FATAL EXCEPTION: main
                                                              Process: cn.mtlife.life, PID: 4196
                                                              java.lang.RuntimeException: Failure from system
                                                                  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1516)
                                                                  at android.app.Activity.startActivityForResult(Activity.java:3978)
                                                                  at android.app.Activity.startActivityForResult(Activity.java:3939)
                                                                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:843)
                                                                  at android.app.Activity.startActivity(Activity.java:4262)
                                                                  at android.app.Activity.startActivity(Activity.java:4230)
                                                                  at cn.mtlife.life.ui.MainActivity$1$1.onClick(MainActivity.java:133)
                                                                  at android.support.v7.app.AlertController$AlertParams$3.onItemClick(AlertController.java:958)
                                                                  at android.widget.AdapterView.performItemClick(AdapterView.java:310)
                                                                  at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
                                                                  at android.widget.AbsListView$PerformClick.run(AbsListView.java:3081)
                                                                  at android.widget.AbsListView$3.run(AbsListView.java:3947)
                                                                  at android.os.Handler.handleCallback(Handler.java:739)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                  at android.os.Looper.loop(Looper.java:148)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:5432)
                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:735)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
                                                               Caused by: android.os.TransactionTooLargeException: data parcel size 34524432 bytes
                                                                  at android.os.BinderProxy.transactNative(Native Method)
                                                                  at android.os.BinderProxy.transact(Binder.java:503)
                                                                  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2659)
                                                                  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1509)
                                                                  at android.app.Activity.startActivityForResult(Activity.java:3978) 
                                                                  at android.app.Activity.startActivityForResult(Activity.java:3939) 
                                                                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:843) 
                                                                  at android.app.Activity.startActivity(Activity.java:4262) 
                                                                  at android.app.Activity.startActivity(Activity.java:4230) 
                                                                  at cn.mtlife.life.ui.MainActivity$1$1.onClick(MainActivity.java:133) 
                                                                  at android.support.v7.app.AlertController$AlertParams$3.onItemClick(AlertController.java:958) 
                                                                  at android.widget.AdapterView.performItemClick(AdapterView.java:310) 
                                                                  at android.widget.AbsListView.performItemClick(AbsListView.java:1145) 
                                                                  at android.widget.AbsListView$PerformClick.run(AbsListView.java:3081) 
                                                                  at android.widget.AbsListView$3.run(AbsListView.java:3947) 
                                                                  at android.os.Handler.handleCallback(Handler.java:739) 
                                                                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                  at android.os.Looper.loop(Looper.java:148) 
                                                                  at android.app.ActivityThread.main(ActivityThread.java:5432) 
                                                                  at java.lang.reflect.Method.invoke(Native Method) 
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:735) 
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 

加载中
0
xesam
xesam

第一,你可以保存为一个临时文件来传递,第二,你可以直接传递一个全局引用。

虽然说全局引用不是什么好事情,但是这种情况下用完销毁就行了。

0
Storm-Cai
Storm-Cai
传递文件名, 重新decode图片。 intent最多可以传2M还是5M数据
返回顶部
顶部