serialización de Android (dos) Parcelable

1. Todos los códigos

Actividad principal:

Java:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
    
    private static final String TAG = "MainActivity";
    private Button mBtIntent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

    }


    private void initView() {
    
    
        mBtIntent = (Button) findViewById(R.id.bt_intent);

        mBtIntent.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
    
    
        switch (v.getId()) {
    
    
            case R.id.bt_intent:
                User user = new User();
                user.setAge(100);
                user.setName("sunweiaho");
                Intent intent=new Intent(MainActivity.this,MainActivity2.class);
                intent.putExtra("data",user);
                startActivity(intent);
                break;
        }
    }
}

xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/bt_intent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity2:

Java:

public class MainActivity2 extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Intent intent = getIntent();
        Parcelable data = intent.getParcelableExtra("data");
        Toast.makeText(this, data.toString(), Toast.LENGTH_SHORT).show();
    }
}

xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">

</androidx.constraintlayout.widget.ConstraintLayout>

Clase de usuario:

/**parcelable它的效率比serializable效率要高,
 * parcelable写上面就序列化上面的,而serializable则把对象的都序列化出去
 * @ClassName User
 * @Description TODO
 * @Author ${孙伟豪}
 * @Date 2020/10/28 14:12
 * @Version 1.0
 */
public class User implements Parcelable {
    
    
    private String name;
    private int age;

    //内容描述,用不到默认返回0即可
    @Override
    public int describeContents() {
    
    
        return 0;
    }
    public User() {
    
    
    }

    protected User(Parcel in) {
    
    
        this.name = in.readString();
        this.age = in.readInt();
    }

    //用于对象的序列化
    @Override
    public void writeToParcel(Parcel dest, int flags) {
    
    
        //将那么和age属性序列化出去
        dest.writeString(this.name);
        dest.writeInt(this.age);//注释这里与下面的,就不会序列化了
    }
    //用于反序列化
    public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {
    
    
        //反序列化的核心方法
        @Override
        public User createFromParcel(Parcel source) {
    
    
//            return new User(source);
            User user=new User();
            //下面读取是靠顺序的
            user.setName(source.readString());
            user.setAge(source.readInt());//注释这里与上面的,就不会序列化了
            return user;
        }

        @Override
        public User[] newArray(int size) {
    
    
            return new User[size];
        }
    };

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

    @Override
    public String toString() {
    
    
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2. Pasos

  1. Cree dos actividades para implementar la función de salto:
  2. Función de salto, de hecho, funcionamiento normal con salto.
User user = new User();
                user.setAge(100);
                user.setName("sunweiaho");
                Intent intent=new Intent(MainActivity.this,MainActivity2.class);
                intent.putExtra("data",user);
                startActivity(intent);
  1. Código clave: como arriba

Otra forma rápida de escribir beans, use complementos: Parcelable

Paso 1: Alt + insertar para abrir la siguiente interfaz y luego seleccione
Inserte la descripción de la imagen aquí
Paso 2:
Inserte la descripción de la imagen aquí

Escriba los métodos de obtención y configuración y el método toString para completar
todo el código:

/**
 * @ClassName User2
 * @Description TODO
 * @Author ${孙伟豪}
 * @Date 2020/10/28 16:48
 * @Version 1.0
 */
public class User2 implements Parcelable {
    
    
    private String name;
    private int age;

    @Override
    public int describeContents() {
    
    
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
    
    
        dest.writeString(this.name);
        dest.writeInt(this.age);
    }

    public User2() {
    
    
    }

    protected User2(Parcel in) {
    
    
        this.name = in.readString();
        this.age = in.readInt();
    }

    public static final Parcelable.Creator<User2> CREATOR = new Parcelable.Creator<User2>() {
    
    
        @Override
        public User2 createFromParcel(Parcel source) {
    
    
            return new User2(source);
        }

        @Override
        public User2[] newArray(int size) {
    
    
            return new User2[size];
        }
    };

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

    @Override
    public String toString() {
    
    
        return "User2{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3. Problema y clave:

Inserte la descripción de la imagen aquí
Comparado con serializable, parcelable tiene un alto rendimiento, pero es más complicado de usar

Supongo que te gusta

Origin blog.csdn.net/sunweihao2019/article/details/109336928
Recomendado
Clasificación