zoukankan      html  css  js  c++  java
  • Android 利用Application对象存取公共数据

    本文章来给大家介绍Android 利用Application对象存取公共数据。

    Android系统在运行每一个程序应用的时候,都会创建一个Application对象,用于存储与整个应用相关的公共变量。一个Android 应用只会生成一个Application对象,在不用的Activity中获取的Application对象是一样的,所以Application对象是 一个单例(SingleTon)。Application对象非常适合用于存储一些与整个应用相关数据,例如应用版本,应用登录账户,数据缓存等。

    利用Application对象存储公共数据或数据传递
    在android开发中,activity的切换是很频繁的,差不多可以和一个网站中不同网页之间的切换一样。那么不同的activity之间需要存储公 共信息(如只有一个当前登录用户)以及数据传递等。下面就是一种利用Application对象存储登录用户信息的方法,可以发现这很方便不同的 activity获取登录用户信息。

    首先,新建一个java类继承Application类:MyApplication.java

    package com.example.applicationtest;
    
    import android.app.Application;
    
    public class MyApplication extends Application {
     
     public String appVersion = "v1.0";
     
     //当前登录用户
     private User loginUser = new User();
     
     
     public User getLoginUser(){
      return loginUser;
     }
     
     public void userLogin(User user){
      loginUser.setUserId(user.getUserId());
      loginUser.setUserName(user.getUserName());
     }
     
     public void userLogout(){
      loginUser = new User();
     }
    }

    在AndroidManifest.xml中指定应用的application对象

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.applicationtest"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
    
        <application
            android:name="com.example.applicationtest.MyApplication"
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.applicationtest.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>
        </application>
    
    </manifest>

    在activity中使用application对象, 使用Activity的getApplication()方法。

    package com.example.applicationtest;
    
    import android.os.Bundle;
    import android.app.Activity;
    
    public class MainActivity extends Activity {
     
     private MyApplication mApplication;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      // 获取整个应用的Application对象
      // 在不同的Activity中获取的对象是同一个
      mApplication = (MyApplication) getApplication();
      
     }
     
     /**
      * 一般只有在登录界面中设置登录用户信息,在其他的Activity中
      * 只要通过Application对象就可以获取登录用户信息
      */
     private void login(){
      User user = new User();
      user.setUserId(1);
      user.setUserName("Raysmond");
      // 将登录用户信息保存到Application对象中
      mApplication.userLogin(user);
     }
    
    }

    可以发现通过Application对象,在不同的Activity之间可以方便地实现数据共享。这比在每次切换activity时通过Bundle传递数据方便多了。

    传统的利用Bundle在activity之前传递数据的方式
    假设我们有两个Activity: Activity1和Activity2,Activity1切换到Activity2并传递用户信息。

    Activity1.java

    package com.example.applicationtest;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    
    public class Activity1 extends Activity {
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_activity1);
      // 切换到Activity2
      gotoActivity2();
     }
     
     private void gotoActivity2(){
      Intent intent = new Intent(Activity1.this,Activity2.class);
      Bundle bundle = new Bundle();
      bundle.putLong("USER_ID", 1);
      bundle.putString("USER_NAME", "Raysmond");
      intent.putExtras(bundle);
      startActivity(intent);
     }
    
    }

    Activity2.java

    package com.example.applicationtest;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    
    public class Activity2 extends Activity {
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_activity2);
      getUserInfo();
      
     }
     
     /**
      * 从上一个Activity获取传递过来的数据
      */
     private void getUserInfo(){
      Intent intent = this.getIntent();
      Bundle bundle = intent.getExtras();
      long userId = bundle.getLong("USER_ID", -1L);
      String userName = bundle.getString("USER_NAME");  
     }
    
    }

    我们可以发现这种传递数据的方式比较繁琐,特别是当Activity众多,切换很频繁的时候。整个应用的的公共数据(如登录信息)在不同的activity之间都一样且都需要用到时,利用Application对象更加简洁和方便

  • 相关阅读:
    linux文件权限查看及修改(实用)
    将JSON对象带有格式的写出到文件中
    mySQL数据库Sql语句执行效率检查--Explain命令
    mysql优化
    Linux-设置固定IP
    logback 配置详解(二)——appender
    logback 配置详解(一)——logger、root
    Thread
    Singleton
    多线程编程总结
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4546826.html
Copyright © 2011-2022 走看看