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

  1. package activityGlobelVariable;
  2.  
  3. import java.util.HashMap;
  4.  
  5. import android.app.Application;
  6.  
  7. public class MyApplication extends Application{
  8.  
  9. //也可以用hashMap来代替这些私有变量
  10. private HashMap<String, Object> map=new HashMap<String, Object>();
  11.  
  12. private String name;
  13. private int age;
  14.  
  15. public HashMap<String, Object> getMap() {
  16. return map;
  17. }
  18.  
  19. public void setMap(HashMap<String, Object> map) {
  20. this.map = map;
  21. }
  22.  
  23. 39 private static MyApplication instance=null;
  24. 40
  25. 41 public static MyApplication getInstance(){
  26. 42 return instance;
  27. 43 }

  28. public String getName() {
  29. return name;
  30. }
  31.  
  32. public void setName(String name) {
  33. this.name = name;
  34. }
  35.  
  36. public int getAge() {
  37. return age;
  38. }
  39.  
  40. public void setAge(int age) {
  41. this.age = age;
  42. }
  43.  
  44. public MyApplication() {
  45. super();
  46. }
  47.  
  48. public MyApplication(String name, int age) {
  49. super();
  50. this.name = name;
  51. this.age = age;
  52. }
  53.  
  54. @Override
  55. 86 public void onCreate() {
  56. 87 // TODO Auto-generated method stub
  57. 88 super.onCreate();
  58. 89 this.instance=this;
  59. 90 }
  60.  
  61. @Override
  62. public String toString() {
  63. return "MyApplication [name=" + name + ", age=" + age + "]";
  64. }
  65.  
  66. }

activityGlobelVariable.MainActivity

  1. package activityGlobelVariable;
  2.  
  3. import com.example.activityGlobelVariable.R;
  4.  
  5. import android.app.Activity;
  6. import android.content.Intent;
  7. import android.os.Bundle;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11.  
  12. public class MainActivity extends Activity{
  13. private Button btn_openActivty;//创建一个button对象
  14. MyApplication app = MyApplication.getInstance();
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);//父类操作
  17. setContentView(R.layout.activity_main);//引入名为activity_main的界面
  18. btn_openActivty=(Button) findViewById(R.id.btn_openActivity);//找id为btn_openActivity的button
  19. btn_openActivty.setOnClickListener(new OnClickListener() {//设置button点击监听
  20.  
  21. @Override
  22. public void onClick(View v) {//onclick事件
  23. // TODO Auto-generated method stub
  24. Intent intent=new Intent(MainActivity.this,Activity01.class);//初始化intent
  25. //Application域的访问
  26. //MyApplication app=(MyApplication) getApplication();
  27. app.setName("fry");
  28. app.setAge(22);

  29. //HashMap的应用
  30. app.getMap().put("data1", "data1");
  31. app.getMap().put("data2", 2.2);
  32. startActivity(intent);//打开activity
  33. }
  34. });
  35. }
  36. @Override
  37. protected void onDestroy() {
  38. // TODO Auto-generated method stub
  39. super.onDestroy();
  40. app.getMap().remove("data1");
  41. app.getMap().remove("data2");
  42. }
  43. }

activityGlobelVariable.Activity01

  1. package activityGlobelVariable;
  2.  
  3. import com.example.activityGlobelVariable.R;
  4.  
  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.widget.TextView;
  8.  
  9. public class Activity01 extends Activity {
  10. private static final MyApplication MyApplication = null;
  11. private TextView tv_answer;
  12.  
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. // TODO Auto-generated method stub
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity01);
  18. tv_answer = (TextView) findViewById(R.id.tv_answer);
  19. /*
  20. * getApplication()是Activity类里面的方法,别的类没有
  21. * 因为MyApplication继承了Application,是全局的 在配置文件里面要配MyApplication
  22. * MyApplication app=(MyApplication) getApplication();
  23. * 上面这句话就是访问调用MyApplication
  24. */
  25. // MyApplication app=(MyApplication) getApplication();
  26. MyApplication app = MyApplication.getInstance();
  27. // HashMap的应用
  28.  
  29. String s1 = (String) app.getMap().get("data1");
  30. double d1 = (Double) app.getMap().get("data2");
  31. tv_answer.setText("app:" + app + "\ns1:" + s1 + "\nd1:" + d1);
  32. }
  33. }

/activityGlobelVariable/AndroidManifest.xml

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2. package="com.example.activityGlobelVariable"
  3. android:versionCode="1"
  4. android:versionName="1.0" >
  5.  
  6. <uses-sdk
  7. android:minSdkVersion="8"
  8. android:targetSdkVersion="19" />
  9.  
  10. <application
  11. android:name="activityGlobelVariable.MyApplication"
  12. android:allowBackup="true"
  13. android:icon="@drawable/ic_launcher"
  14. android:label="@string/app_name"
  15. android:theme="@style/AppTheme" >
  16. <activity
  17. android:name="activityGlobelVariable.MainActivity"
  18. android:label="@string/app_name" >
  19. <intent-filter>
  20. <action android:name="android.intent.action.MAIN" />
  21.  
  22. <category android:name="android.intent.category.LAUNCHER" />
  23. </intent-filter>
  24. </activity>
  25. <activity android:name="activityGlobelVariable.Activity01" android:exported="true"></activity>
  26. </application>
  27.  
  28. </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. 前端 javascript 数据类型 布尔类型

    python 是大写 True javascript 是小写 true false 也是 布尔类型仅包含真假,与Python不同的是其首字母小写. ==      比较值相等 !=       不等于 ...

  2. 0602-Zuul构建API Gateway-Zuul Http Client、cookie、header

    一.Zuul Http Client zuul使用的默认HTTP客户端现在由Apache HTTP Client支持,而不是已弃用的Ribbon RestClient.要使用RestClient或使用 ...

  3. 简明python教程十----python标准库

    import sys def readfile(filename): 'Print a file to the standard output.' f=file(filename) while Tru ...

  4. SpringMVC-SimpleDEMO

    本博文主要将如何配置一个简单的SpringMVC的DEMO,由上一讲的SpringMVC工作流程来看,配置一个SpringMVC的步骤是简单而清晰的. 一.引入SpringMVC所需依赖   < ...

  5. Mac Outlook邮箱MicrosoftExchange邮箱快满了,请减小邮箱大小。

    这两天我的Mac电脑中的Exchange总是收到公司的邮箱发来的[存储空间不足的告警邮件] MicrosoftExchange329e71ec88ae4615bbc36ab6ce41109e@your ...

  6. 三张图看遍Linux性能监控、测试、优化工具

    Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经考验的.简单的小工具.系统性能专家 Brendan D. Gregg在最近的 LinuxCon NA 2014 大 ...

  7. cocos2dx 3.x HttpRequest GET获取数据

    .h文件 #include "network/HttpClient.h" //包含头文件 // GET 函数 void createGetHttp(); void getHttp_ ...

  8. TOSCA自动化测试工具--打开已存在的Projects

    1.刚login账号的界面 2.找到左下角Browse,找到文件路径,选择文件,打开 3.展示已打开的project 4.这个页面上便可进行自己想要的操作 5.关闭projects,最下面状态栏进行有 ...

  9. ABP官方文档翻译 1.3 模块系统

    ABP模块系统 介绍 模块定义 生命周期方法 PreInitialize Initialize PostInitialize Shutdown 模块依赖 插件系统 ASP.NET Core ASP.N ...

  10. Django学习笔记之CBV和FBV

    FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class base v ...