activity之间通过全局变量传递数据

一、简介

Application域中的onCreate方法是Android程序的入口,Android程序运行的时候就自动加载Application的对象,感觉Main方法应该是封装在这个里面的。

activity中传递数据主要用intent方式和全局变量方式。

二、使用步骤

1、新建MyApplication类继承Application类

public class MyApplication extends Application

继承之后MyApplication类就是全局的了

2、在传输数据页面调用MyApplication类并生成数据

MyApplication app=(MyApplication) getApplication();

app.setName("fry");
app.setAge(22);

3、在接收数据页面调用MyApplication类并输出数据

MyApplication app=(MyApplication) getApplication();

tv_answer.setText("app:" + app );

4、在AndroidManifest.xml配置文件中添加MyApplication类的Android启动配置

android:name="activityGlobelVariable.MyApplication"

5、大功告成

三、具体代码实例

代码中进行了两次优化:

一是对MyApplication类实现了单例化模式,便于在没有继承Activity的类里面调用

调用:

MyApplication app = MyApplication.getInstance();

二是对于传输多组数据,使用了HashMap

private HashMap<String, Object> map=new HashMap<String, Object>();

结果图:

activityGlobelVariable.MyApplication

 package activityGlobelVariable;

 import java.util.HashMap;

 import android.app.Application;

 public class MyApplication extends Application{

     //也可以用hashMap来代替这些私有变量
private HashMap<String, Object> map=new HashMap<String, Object>();
private String name;
private int age; public HashMap<String, Object> getMap() {
return map;
} public void setMap(HashMap<String, Object> map) {
this.map = map;
} 39 private static MyApplication instance=null;
40
41 public static MyApplication getInstance(){
42 return instance;
43 }

public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public MyApplication() {
super();
} public MyApplication(String name, int age) {
super();
this.name = name;
this.age = age;
} @Override
86 public void onCreate() {
87 // TODO Auto-generated method stub
88 super.onCreate();
89 this.instance=this;
90 }
@Override
public String toString() {
return "MyApplication [name=" + name + ", age=" + age + "]";
} }

activityGlobelVariable.MainActivity

 package activityGlobelVariable;

 import com.example.activityGlobelVariable.R;

 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity{
private Button btn_openActivty;//创建一个button对象
MyApplication app = MyApplication.getInstance();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//父类操作
setContentView(R.layout.activity_main);//引入名为activity_main的界面
btn_openActivty=(Button) findViewById(R.id.btn_openActivity);//找id为btn_openActivity的button
btn_openActivty.setOnClickListener(new OnClickListener() {//设置button点击监听 @Override
public void onClick(View v) {//onclick事件
// TODO Auto-generated method stub
Intent intent=new Intent(MainActivity.this,Activity01.class);//初始化intent
//Application域的访问
//MyApplication app=(MyApplication) getApplication();
app.setName("fry");
app.setAge(22);

//HashMap的应用
app.getMap().put("data1", "data1");
app.getMap().put("data2", 2.2);
startActivity(intent);//打开activity
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
app.getMap().remove("data1");
app.getMap().remove("data2");
}
}

activityGlobelVariable.Activity01

package activityGlobelVariable;

import com.example.activityGlobelVariable.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView; public class Activity01 extends Activity {
private static final MyApplication MyApplication = null;
private TextView tv_answer; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity01);
tv_answer = (TextView) findViewById(R.id.tv_answer);
/*
* getApplication()是Activity类里面的方法,别的类没有
* 因为MyApplication继承了Application,是全局的 在配置文件里面要配MyApplication
* MyApplication app=(MyApplication) getApplication();
* 上面这句话就是访问调用MyApplication
*/
// MyApplication app=(MyApplication) getApplication();
MyApplication app = MyApplication.getInstance(); // HashMap的应用 String s1 = (String) app.getMap().get("data1");
double d1 = (Double) app.getMap().get("data2");
tv_answer.setText("app:" + app + "\ns1:" + s1 + "\nd1:" + d1);
}
}

/activityGlobelVariable/AndroidManifest.xml

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activityGlobelVariable"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" /> <application
android:name="activityGlobelVariable.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="activityGlobelVariable.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="activityGlobelVariable.Activity01" android:exported="true"></activity>
</application> </manifest>

activity之间通过全局变量传递数据的更多相关文章

  1. Activity之间使用intent传递大量数据带来问题总结

    转载:大飞 http://blog.csdn.net/rflyee/article/details/47441405   Activity之间使用Parcel传递大量数据产生的问题. Activity ...

  2. Android 使用全局变量传递数据

    使用全局变量传递数据,所谓的全局变量类似于jee开发中的application变量.申明后,全局调用.只有当内存被清理后,才被销毁.否则一直可以调用. 还是使用点击一个button,传递一个数据到另一 ...

  3. activity之间參数传递&amp;&amp;获取activity返回值&amp;&amp;activity生命周期

    Activity之间參数传递 A activity想将參数传给B activity时能够利用Intent将消息带过去 Intent intent = new Intent(this,BActivity ...

  4. android第一行代码-3.activity之间的调用跟数据传递

    前面两节所有应用都是同一个activity中的,是时候讲activity之间交互的操作了,此后会涉及到intent这个概念,这也算一个新的里程碑开始. 主要内容包括intent的使用,以及activi ...

  5. 37.Activity之间的转换以及数据的传递(Intent)学习

      Intent简介:                                                                                在一个Androi ...

  6. Android教程 -04 启动其它Activity,静态工厂设计模式传递数据

    视频建议采用超清模式观看, 欢迎点击订阅我的优酷 意图 Intent 一个应用程序肯定不只有一个界面,如何切换到其它界面,只时候就需要启动其它的Activity.启动Activity有多种方式.我在这 ...

  7. 多个Activity之间的切换与数据交互

    总结 两个activity之间切换我概括的分为两步: 1. 代码实现切换操作.2.配置中声明另外一个acitivity! 1. 代码实现切换操作 显示定义一个intent 对象,Intent 这个类的 ...

  8. [Android] Activity间切换,传递数据

    前面照着android系统的裁剪图片的功能自己写了一个相似的工具.功能是大体上实现了,但留下了一个调用的问题:如何从我的程序调用这个裁剪工具,并且获得裁剪后的图片呢? 其实这个也很简单了,就是inte ...

  9. android使用全局变量传递数据

    android中Application是用来保存全局变量的,在package创建的时候就存在了,到所有的activity都被destroy掉之后才会被释放掉.所以当我们需要全局变量的时候只要在appl ...

随机推荐

  1. vxworks 的 socket, thread, 信号量模型

    http://www.vxdev.com/docs/vx55man/vxworks/netguide/c-sockets.html http://www.vxdev.com/docs/vx55man/ ...

  2. centos 解决error: rpmdbNextIterator问题 (转)

    昨天重装RedHat4以后出现了下面这个问题 [root@RedHat4 ~]# rpm -qa |grep vimerror: rpmdbNextIterator: skipping h#      ...

  3. python3 爬虫神器pyquery的使用实例之爬网站图片

    PyQuery 可让你用 jQuery 的语法来对 xml 进行操作,这和 jQuery 十分类似.如果利用 lxml,pyquery 对 xml 和 html 的处理将更快. 如果对 jQuery  ...

  4. Linux 最常用的20条命令

    1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如:   cd /root/Docements # 切 ...

  5. 命令查看java的class字节码文件

    源代码: public class Math { public static void main(String[] args){ int a=1; int b=2; int c=(a+b)*10; } ...

  6. 19. Remove Nth Node From End of List(移除倒数第N的结点, 快慢指针)

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  7. Ubuntu&Linux系统出现文件系统只读Read-only file system 的快速解决方法

    问题描述: 周末运行盘平台服务程序,周一来操作系统卡顿,主进程已退出,重启进程时提示Read-only file system:新建目录和其他chmod -R等等操作都提示Read-only file ...

  8. ThinkPHP语法总结

    1, $data存放实体: $data['title'] = I('post.title'); // 标题 $data['content'] = I('post.content'); // 正文 $d ...

  9. SQL学习笔记之B+树

    0x00 概述 要描述清楚B+树,得先了解二叉查找数,平衡二叉树. 0x01 二叉查找树 任意节点,它的左子树如果不为空,那么左子树上所有节点的值都小于根节点的值:任意节点,他的右子树如果不为空,那么 ...

  10. pxe基于虚拟机的自启动

    环境系统:centos6.4 min版 虚拟机实现:提供的服务器ip为192.168.0.105,桥接 安装dhcp服务: yum -y install dhcp 配置dhcp服务,使能够成功启动: ...