在android中页面与页面之间的数据传递,我们一般都是使用Intent,但是Intent有时候也不是很好,就比如在一个Activity中传递一个图片到另一个Activity,也可以使用Intent来传,但是图片的大小却限定的很小,似乎只有512K还是1M,而如果我们想传再大一点的图片..对不起..程序就报异常了.虽然直接使用Inetnt传行不通,但是有别的办法的.下面有几个方法:
1.用intent传递这个Bitmap的byte[](就是图像信息,在此要注意,Bitmap是一个位图对象,里头有你的图片...而不单单是一张图片,里头还包含了很多方法..如果你是一个新手的话,千万要注意,java是一个面向对象的语言).
private byte[] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
return baos.toByteArray();
}
转换Bitmap 为 byte[]
byte buff[] = new byte[1024*1024];//看你图有多大..自己看着改
buff = Bitmap2Bytes(LZbitmap);//这里的LZbitmap是Bitmap类的,跟第一个方法不同
在intent传递时:
Intent myIntent = new Intent();
myIntent.putExtra("bitmap",buff);
第二个activity:
Intent myIntent = getIntent();
byte buff[] = myIntent.getSerializableExtra("bitmap");
Bitmap bmp=BitmapFactory.decodeByteArray(buff, 0, buff.length);//重新编码出Bitmap对象
2.用全局变量的方法.
全局变量有两种办法,一种是创建一个类,一个设置一个静态的成员变量..然后申明两个方法来获取和设置..
如下(这也是java的常用方法):
public class myBitmapStore {
static private Bitmap bmp=null;//一定要是static的才行..
static void setBitmap(Bitmap bmp){
this.bmp = bmp;
}
static Bitmap getBitmap(){
return this.bmp;
}
}
这个的传递就不用Intent了,在要传递之前:
myBitmapStore.setBitmap(LZbitmap);
在第二个activity:
Bitmap bmp = myBitmapStore.getBitmap();
::::::::::::::::::::
另一种全局变量的方法是android独有的..
我就不写代码了,同上一个类似...
这里就说一下使用方法..
创建一个类extends Application,注意:这个类必须是public
public class myApp extends Application{
//然后在这里头申明Bitmap变量..不必是static..因为这个类最终是会被系统实例化的..
}
要注意在manifest里头指定这个类:
<application
android:name="myApp">
<!-- 在application标签的name属性里头填上这个类.. -->
然后在程序里使用的时候,就是:
myApp myapp = (myApp)getApplication();//获得这个myApp的对象..
Bitmap bmp = myapp.GetBitmap();//具体方法的实现,自己写..跟前面那个一样..
然后怎么做,同上面很类似..自己推敲推敲...
PS:这两种方法的区别就是,一个是类中静态的方法和成员,而一个是被实例化了的类..