Intent四种数据传递方式

Intent四种数据传递方式

MainActivity中传值操作

public class MainActivity extends AppCompatActivity {

    /**
     * 当一个Activity创建时会调用该方法,通过我们可以在该方法中进行组件的初始化工作
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("MainActivity-onCreate");
    }

    /**
     * 在Activity可见,但还不能进行交互时会调用该方法
     * 在onCreate之后调用
     */
    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("MainActivity-onStart");
    }

    /**
     * 当Activity可以交互时调用
     * 在onStart之后调用,该方法被调用后就表示Activity进入了激活状态
     * resumed状态
     */
    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("MainActivity-onResume");
    }

    /**
     * 一个从stoped状态的Activity重新被激活时调用
     * 接着会调用onStart()方法
     */
    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("MainActivity-onRestart");
    }

    /**
     * 当前Activity被另一个Activity覆盖,失去焦点,但还可见,不能交互
     * 那么此时当前Activity进入了paused状态(暂停状态)
     * 当此状态下Activity重新获取焦点时会再调用onResume()方法
     */
    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("MainActivity-onPause");
    }

    /**
     * 当前Activity被另一个Activity完全覆盖,不可见且不可交互
     * 那么此时当前Activity进入了stoped状态(停止状态)
     * 此状态下的Activity被重新显示时,会调用OnRestart()方法
     */
    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("MainActivity-onStop");
    }

    /**
     * 当前Activity被销毁时调用,表示结束生命周期
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("MainActivity-onDestroy");
    }

    public void activityClick(View v){
        //打开另一个Activity,一个Intent对象代表一个意图
        Intent intent = new Intent(this,Main2Activity.class);
        //给Activity传值方式一:创建一个Bundle对象封装数据
        Bundle data = new Bundle();
        data.putInt("id",1);
        data.putString("name","宏才");
        data.putFloat("age",20.5f);
        intent.putExtra("data",data);
        //给Activity传值方式二:使用Intent准备的Bundle对象
//        intent.putExtra("id",1);
//        intent.putExtra("name","大雷");
//        intent.putExtra("age",18.5f);
        startActivity(intent);//启动Activity
    }

	  /**
     * 方式三:传递对象数据
     * @param view
     */
    public void sendObjectClick(View view){
        Intent intent = new Intent(this,Main2Activity.class);
        User user = new User();
        user.setId(1);
        user.setName("宏才");
        user.setSex("男");
        intent.putExtra("user",user);//user对象必须实现序列化接口
        startActivity(intent);
    }

	 /**
     * 方式四:使用parcelable传递对象
     * @param view
     */
    public void parcelableClick(View view){
        Dog dog = new Dog();
    dog.setName("tom");
    dog.setSex("公");
    dog.setAge(5);
    Intent intent = new Intent(this,Main2Activity.class);
    intent.putExtra("dog",dog);
    startActivity(intent);
   }
}

Main2Activity 接收数据的对应操作

public class Main2Activity extends AppCompatActivity {
    private TextView textView2_data,textView2_user,textView2_parcelable_dog;
     /**
     * 当一个Activity创建时会调用该方法,通过我们可以在该方法中进行组件的初始化工作
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        System.out.println("Main2Activity-onCreate");

        textView2_data = (TextView) findViewById(R.id.textView2_data);
        textView2_user = (TextView) findViewById(R.id.textView2_user);
        textView2_parcelable_dog = (TextView) findViewById(R.id.textView2_parcelable_dog);

        Intent intent = getIntent();
        System.out.println("2-"+intent);
        //方式一取值
//        Bundle data = intent.getBundleExtra("data");
//        int id = data.getInt("id");
//        String name = data.getString("name");
//        float age = data.getFloat("age");

        //方式二取值
//        int id = intent.getIntExtra("id",0);
//        String name = intent.getStringExtra("name");
//        float age = intent.getFloatExtra("age", 18f);
//
//        textView2_data.setText("id="+id+",name="+name+",age="+age);

        //方式三取值
//        User user = (User) intent.getSerializableExtra("user");
//        textView2_user.setText(user.toString());

        //方式四取值
        Dog dog = intent.getParcelableExtra("dog");
        textView2_parcelable_dog.setText(dog.toString());
    }

    /**
     * 在Activity可见,但还不能进行交互时会调用该方法
     * 在onCreate之后调用
     */
    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("Main2Activity-onStart");
    }

    /**
     * 当Activity可以交互时调用
     * 在onStart之后调用,该方法被调用后就表示Activity进入了激活状态
     * resumed状态
     */
    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("Main2Activity-onResume");
    }

    /**
     * 一个从stopped状态的Activity重新被激活时调用
     * 接着会调用onStart()方法
     */
    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("Main2Activity-onRestart");
    }

    /**
     * 当前Activity被另一个Activity覆盖,失去焦点,但还可见,不能交互
     * 那么此时当前Activity进入了paused状态(暂停状态)
     * 当此状态下Activity重新获取焦点时会再调用onResume()方法
     */
    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("Main2Activity-onPause");
    }

    /**
     * 当前Activity被另一个Activity完全覆盖,不可见且不可交互
     * 那么此时当前Activity进入了stopped状态(停止状态)
     * 此状态下的Activity被重新显示时,会调用OnRestart()方法
     */
    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("Main2Activity-onStop");
    }

    /**
     * 当前Activity被销毁时调用,表示结束生命周期
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("Main2Activity-onDestroy");
    }

    public void openActivity(View v){
        //打开另一个Activity,一个Intent对象代表一个意图
        Intent intent = new Intent(this,MainActivity.class);
        startActivity(intent);//启动Activity
    }
}

Parcelable传值时 对象的准备:

public class Dog implements Parcelable{
    private String name;
    private String sex;
    private int age;

    //对象的创建器(我们目的是要从包裹里把数据取出来,并封装成对象(Dog))
    public static final Parcelable.Creator<Dog> CREATOR = new Parcelable.Creator<Dog>(){
        //从包裹里把数据取出来
        @Override
        public Dog createFromParcel(Parcel source) {
            System.out.println("createFromParcel");
            Dog dog = new Dog();
            dog.setName(source.readString());
            dog.setSex(source.readString());
            dog.setAge(source.readInt());
            return dog;
        }
        @Override
        public Dog[] newArray(int size) {
            return new Dog[size];
        }
    };

    <h2><pre name="code" class="java"> <span style="font-size:18px;">/**
     * 内容的描述标记(通常使用默认实现)
     * @return
     */
    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * 打包,把数据写入包裹对象
     * @param dest
     * @param flags
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(sex);
        dest.writeInt(age);
    }</span>

public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age
= age; } @Override public String toString() { return "Dog{" + "name=‘" + name + ‘\‘‘ + ", sex=‘" + sex + ‘\‘‘ + ", age=" + age + ‘}‘; } }

				
时间: 2024-10-22 14:59:31

Intent四种数据传递方式的相关文章

iOS 常用四种数据存储方式

iOS 常用四种数据存储方式 在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅, ,使得用户体验更好.下面介绍?一下数据保存的方式: 1.NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法.前?一个方法告诉系统怎么对对象进行编码,而后?一个方法则是告诉系统怎么对对象进行解码.例如对Possession对

四种数据保持方法

IOS 四种保存数据的方式 (2013-04-02 15:04:53) 转载▼ 在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加 流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍?一下数据保存的方式: 1.NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提 供encodeWithCoder:和initWithCoder:方法.前?一个方法告诉系统怎么对对象进行编

iOS中常用的四种数据持久化方法简介

iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject <NSCoding>@property (nonatomic, assign) NSInteger userID;@property (nonatomic,

【iOS开发-99】POST四种数据提交方式以及NSURLSession上传任务的一些知识

(1)POST四种数据提交方式 --Content-Type:application/x-www-form-urlencoded,提交的数据格式就是key1=value1&key2=value2的方式. NSURL *url=nil; NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f]; NSString *str=[NSString st

IOS的四种数据存储方式及优劣

IOS有四种经常使用数据存储方式: 第一种方法:用NSUserDefaults存储配置信息 NSUserDefaults被设计用来存储设备和应用的配置信息.它通过一个工厂方法返回默认的.也是最经常使用到的实例对象. 这个对象中储存了系统中用户的配置信息,开发人员能够通过这个实例对象对这些已有的信息进行改动.也能够依照自己的需求创建新的配置项. 他实际上是存储于文件沙盒中的一个.plist文件,而且没有被系统加密,仅仅是ios6以后不是存于经常使用的文档文件夹下,所以不破解系统是看不到该文件的.所

IOS的四种数据存储方式和优略

IOS有四种常用数据存储方式: 第一种方法:用NSUserDefaults存储配置信息 NSUserDefaults被设计用来存储设备和应用的配置信息,它通过一个工厂方法返回默认的.也是最常用到的实例对象.这个对象中储存了系统中用户的配置信息,开发者可以通过这个实例对象对这些已有的信息进行修改,也可以按照自己的需求创建新的配置项.他在IOS6之后已经在文件沙盒中看不到它的信息了,所以可以存储机密信息(用户名和密码)密码,防止手机系统被破解后看你的沙盒子文件.一般这种方法存储少量信息,若是存储大量

013-HQL中级3-Hive四种数据导入方式介绍

Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3).从别的表中查询出相应的数据并导入到Hive表中:(4).在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中. 一.从本地文件系统中导入数据到Hive表先在Hive里面创建好表,如下: hive> create table wyp > (id int, name string, > age int, tel string) > R

对比iOS中的四种数据存储

你是用什么方法来持久保存数据的?这是在几乎每一次关于iOS技术的交流或讨论都会被提到的问题,而且大家对这个问题的热情持续高涨.本文主要从概念上把“数据存储”这个问题进行剖析,并且结合各自特点和适用场景给大家提供一个选择的思路,并不详细介绍某一种方式的技术细节. 谈到数据储存,首先要明确区分两个概念,数据结构和储存方式.所谓数据结构就是数据存在的形式.除了基本的NSDictionary.NSArray和NSSet这些对象,还有更复杂的如:关系模型.对象图和属性列表多种结构.而存储方式则简单的分为两

iOS中常用的四种数据持久化技术

iOS中的数据持久化方式,基本上有以下四种:属性列表 对象归档 SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject <NSCoding>@property (nonatomic, assign) NSInteger userID;@property (nonatomic, copy) NSString *nam