继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

使用Intent传递对象

慕尼黑0536602
关注TA
已关注
手记 37
粉丝 3
获赞 6

Intent 的用法你已经比较熟悉了,我们可以借助它来启动活动,发送广播,启动服务等。在进行上诉操作的时候,我们还可以在Intent中添加一些附加数据,以达到传值的效果,比如在MainActivity中传值:

package com.example.parcelableapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    private EditText edt;
    private Button btn ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edt = findViewById(R.id.edt);
        btn = findViewById(R.id.btn);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String data = edt.getText().toString();
              Intent intent = new Intent(MainActivity.this,SecondActivity.class);
              intent.putExtra("send_data",data);
              startActivity(intent);
            }
        });


    }
}

然后再在SecondActivity中取出来:

package com.example.parcelableapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {
   private TextView txt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        txt = findViewById(R.id.txt);
        String data = getIntent().getStringExtra("send_data");
        txt.setText(data);
    }
}

但是不知道你有没有发现,putExtra()方法中所支持的数据类型是有限的,虽然常用的一些数据类型它都会支持。但是当你想去传递一些自定义对象的时候,就会发现无从下手。我们就学习一下使用Intent来传递对象的技巧。


Serializable方式

使用Intent来传递对象通常有两种实现方式: Serializable和Parcelable。

Serializable是序列化的意思,表示将一个对象转换成可存储可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。至于序列化的方法也很简单,只需要让一个类去实现Serializable这个接口就可以了。

比如说有一个Person类,其中包含了name 和 age这两个字段,想要将它序列化就可以这样写:

Person类:

package com.example.parcelableapplication;

import java.io.Serializable;

public class Person implements Serializable {
    private String name ;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }
}

MainActivity的设置:

package com.example.parcelableapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    private EditText edt,edt_age;
    private Button btn ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edt = findViewById(R.id.edt);
        edt_age = findViewById(R.id.edt_age);
        btn = findViewById(R.id.btn);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = edt.getText().toString();
                int age = Integer.parseInt(edt_age.getText().toString());
                Person person = new Person();
                person.setName(name);
                person.setAge(age);
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                intent.putExtra("person_data",person);
                startActivity(intent);
            }
        });

    }
}

然后传值给SecondActivity,然后再取值出来:

package com.example.parcelableapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {
   private TextView txt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        txt = findViewById(R.id.txt);
        Person person = (Person)getIntent().getSerializableExtra("person_data");
        int age = person.getAge();
        String name = person.getName();

        if(age >= 18){
            txt.setText("嗨,"+name+"你貌似有点老哦,"+age+"岁的臭老娘们了。");
        }else{
            txt.setText("嗨"+name+",你来得刚刚好!"+age+"的美丽少女");
        }



    }
}


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP