android中不同acitity之间进行数据传递(或者数据保存)

在开发中碰到这么一种需求,每次打开应用时候,需要将应用中某个按钮点击的次数进行统计,上传至服务器。这样就需要保存每次打开应用时候的点击信息。

背景知识,几种变量的生存周期:

(1)类变量,其生存周期和类的生存周期相同,(经历创建->加载->销毁几个阶段);其加载一般发生在第一次创建类的实例或者调用类的方法时候发生。销毁一般在程序运行结束,jvm退出的时候关闭

(2)实例的成员变量,其生存周期和实例对象的生存周期相同(经过创建、初始化、销毁等几个阶段)。其创建一般发生在new该对象时,销毁一般有java自动回收机制完成,当不存在对该对象的引用时,垃圾回收器会考虑将对象回收。

(3)final修饰的变量不可被更改:其初始化的时机,如果是类的静态变量,可以在声明以及静态初始化块中被初始化;如果是成员变量,可以在声明、构造函数中被初始化。

下面是具体的实现思路:

一、通过intent进行传递

通过intent的putExtra方法和getExtra方法可以传递int,boolean,String及可以序列化或者继承了parseable接口的数据。

二、通过类的静态变量进行传递

该方法可以传递任意类型的数据

三,通过全局对象进行传递

全局对象的创建由系统负责,使用全局对象需要一个继承自android.app.Application的类,并在该类中定义任何类型的成员变量和方法。其创建步骤如下:

1,定义一个继承了Application的类

关于全局类的一些说明,可以参照这篇博客:(其实不仅仅用来进行全局参数的传递,对于很多地方公用的函数,也可以在这个类中定义)

http://blog.csdn.net/renguichao/article/details/7667245


利用这个方法,可以传递各种类型的数据:基本类型,对象类型,甚至bitmap等类型。

package com.bobo.activity;

import android.app.Application;

public class MyApplication extends Application {
    private  String data;

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
    

}

 

2,在配置文件中配置该类

<application
        android:name="com.bobo.activity.MyApplication"
        android:allowBackup="true"

 

3,之后可以在程序的任何地方通过如下方法获取MyAPp类的对象

//1,利用全局对象
        MyApplication myApp=(MyApplication)getApplicationContext();
        

 

四、通过剪贴板进行传递

高版本的剪贴板可以传递intent能够传递的数据类型。

但对于低版本,可以将任何对象(包括像bitmap这样的)类型进行base64编码转换为字符串后进行传递。

可见,对于需要将对象转换为字符串进行保存或者传递的场合,base64编码具有广泛的适用意义。

// 这里的object在具体使用的时候,需要替换为对应的类型
    public String Object2Base64Str(Object ob) {
        String str = null;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(ob);
            str = Base64.encodeToString(bos.toByteArray(), Base64.DEFAULT);
            bos.close();
            oos.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }

    public Object Base64StrToObject(String str) {
        Object ob = new Object();
        // 将字符串进行对象的解码
        byte[] bytes = Base64.decode(str, Base64.DEFAULT);
        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
        ObjectInputStream ois;
        try {
            ois = new ObjectInputStream(bis);
            ob = ois.readObject();
            bis.close();
            ois.close();
            return ob;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

 

五、通过sp文件。

在获得该数据的地方对数据进行保存,需要的场合从sp文件中取出,文件一般用于数据的长久存储,如果数据仅仅在一次打开应用的过程中用到,一般不使用这种方法。

六、通过数据库

同sp文件

posted @ 2013-05-24 09:59  bobo的学习笔记  阅读(635)  评论(0编辑  收藏  举报