zoukankan      html  css  js  c++  java
  • 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文件

  • 相关阅读:
    ANGULAR 开发用户选择器指令
    ANGULARJS 动态编译添加到dom中
    poj1061
    poj1077
    poj1095
    poj1102
    poj1088
    血痹汤治四肢麻木
    重用白术、苡仁治腰痛
    腰间盘突出方(刘力红)
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3096261.html
Copyright © 2011-2022 走看看