Android传递对象的三种方式

*   Book.class



```

package com.hnucm.androiddemo.Model;



import java.io.Serializable;



//可序列化对象

public class Book implements Serializable {

    String name;

    Author author;



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public Author getAuthor() {

        return author;

    }



    public void setAuthor(Author author) {

        this.author = author;

    }



    public Book(String name, Author author) {

        this.name = name;

        this.author = author;

    }



    @Override

    public String toString() {

        return "Book{" +

                "name='" + name + '\'' +

                ", author=" + author +

                '}';

    }

}



```



*   Author.class



```

package com.hnucm.androiddemo.Model;



import java.io.Serializable;

//可序列化对象

public class Author implements Serializable {

    String name;

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

    }



    public Author(String name, int age) {

        this.name = name;

        this.age = age;

    }



    @Override

    public String toString() {

        return "Author{" +

                "name='" + name + '\'' +

                ", age=" + age +

                '}';

    }

}



```
  • 进行序列化,利用Intent传递对象

    • MainActivity
    
    package com.hnucm.androiddemo.Controller;
    
    
    
    import androidx.appcompat.app.AppCompatActivity;
    
    
    
    import android.content.Intent;
    
    import android.os.Bundle;
    
    import android.view.View;
    
    import android.widget.Button;
    
    
    
    import com.hnucm.androiddemo.Model.Author;
    
    import com.hnucm.androiddemo.Model.Book;
    
    import com.hnucm.androiddemo.R;
    
    
    
    public class MainActivity extends AppCompatActivity {
    
    
    
        @Override
    
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
    
    
            Button button = findViewById(R.id.button);
    
            button.setOnClickListener(new View.OnClickListener() {
    
                @Override
    
                public void onClick(View view) {
    
                    //创建传递的对象
    
                    Author author = new Author("刘伟",35);
    
                    Book book = new Book("Java设计模式",author);
    
                    //采用Intent传递数据
    
                    //从当前界面传递到另一个界面,确定传递方向
    
                    Intent intent = new Intent(MainActivity.this,SecondActivity.class);
    
                    //利用标志String传递对象
    
                    intent.putExtra("book",book);
    
                    //执行,打开下一个界面
    
                    startActivity(intent);
    
                }
    
            });
    
        }
    
    }
    
    
    
    
  • 进行反序列化,利用key来获取对象。

    • SecondActivity
    
    package com.hnucm.androiddemo.Controller;
    
    
    
    import androidx.appcompat.app.AppCompatActivity;
    
    
    
    import android.os.Bundle;
    
    import android.util.Log;
    
    import android.view.View;
    
    import android.widget.Button;
    
    import android.widget.TextView;
    
    
    
    import com.hnucm.androiddemo.Model.Book;
    
    import com.hnucm.androiddemo.R;
    
    
    
    public class SecondActivity extends AppCompatActivity {
    
    
    
        @Override
    
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_second);
    
    
    
            //初始化显示控件
    
            TextView textView = findViewById(R.id.textView);
    
    
    
            Button button = findViewById(R.id.button2);
    
            button.setOnClickListener(new View.OnClickListener() {
    
                @Override
    
                public void onClick(View view) {
    
                    //接收另一个界面传过来的对象
    
                    //以标志String来确认接收对象
    
                    Book book = (Book) getIntent().getSerializableExtra("book");
    
                    textView.setText("书名:" + book.getName());
    
                    Log.d("作者",book.getAuthor().getName());
    
                }
    
            });
    
        }
    
    }
    
    
    
    
Parcelable接口
  • 创建两个实现了Parcelable接口的对象

  • 实现describeContentswriteToParcel方法

  • 创建Parcelable.Creator接口的实例

    • Book.class

      
      package com.hnucm.androiddemo.Model;
      
      
      
      import android.os.Parcel;
      
      import android.os.Parcelable;
      
      
      
      //可序列化对象
      
      public class Book implements Parcelable {
      
          String name;
      
          Author author;
      
      
      
          public Book(String name, Author author) {
      
              this.name = name;
      
              this.author = author;
      
          }
      
      
      
          public String getName() {
      
              return name;
      
          }
      
      
      
          public void setName(String name) {
      
              this.name = name;
      
          }
      
      
      
          public Author getAuthor() {
      
              return author;
      
          }
      
      
      
          public void setAuthor(Author author) {
      
              this.author = author;
      
          }
      
      
      
          protected Book(Parcel in) {
      
              name = in.readString();
      
              author = in.readParcelable(Author.class.getClassLoader());
      
          }
      
      
      
          //实现方法
      
          @Override
      
          public int describeContents() {
      
              return 0;
      
          }
      
      
      
          //实现方法
      
          @Override
      
          public void writeToParcel(Parcel parcel, int i) {
      
              parcel.writeString(name);
      
              parcel.writeParcelable(author, i);
      
          }
      
      
      
          //创建Creator接口实例
      
          public static final Creator<Book> CREATOR = new Creator<Book>() {
      
              @Override
      
              public Book createFromParcel(Parcel in) {
      
                  return new Book(in);
      
              }
      
      
      
              @Override
      
              public Book[] newArray(int size) {
      
                  return new Book[size];
      
              }
      
          };
      
      }
      
      
      
      
    • Author.class

      
      package com.hnucm.androiddemo.Model;
      
      
      
      import android.os.Parcel;
      
      import android.os.Parcelable;
      
      
      
      //可序列化对象
      
      public class Author implements Parcelable {
      
          String name;
      
          int age;
      
      
      
          public Author(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;
      
          }
      
      
      
          protected Author(Parcel in) {
      
              name = in.readString();
      
              age = in.readInt();
      
          }
      
      
      
          //实现方法
      
          @Override
      
          public void writeToParcel(Parcel dest, int flags) {
      
              dest.writeString(name);
      
              dest.writeInt(age);
      
          }
      
      
      
          //实现方法
      
          @Override
      
          public int describeContents() {
      
              return 0;
      
          }
      
      
      
          //创建Creator接口实例
      
          public static final Creator<Author> CREATOR = new Creator<Author>() {
      
              @Override
      
              public Author createFromParcel(Parcel in) {
      
                  return new Author(in);
      
              }
      
      
      
              @Override
      
              public Author[] newArray(int size) {
      
                  return new Author[size];
      
              }
      
          };
      
      }
      
      
      
      
  • 进行序列化,利用Intent进行传递

  • 进行反序列化,利用key获取对象

  • MainActivity代码不变,SecondActivity代码只要把获取对象的方法由getSerializableExtra改为getParcelableExtra即可。

Json字符串
  • 首先引入gson依赖,使其可以使用gson转换对象为json格式

compile 'com.google.code.gson:gson:2.6.2'



  • 创建对象,成员变量可以并推荐private

    • Book.class
    
    package com.hnucm.androiddemo.Model;
    
    
    
    //对象
    
    public class Book {
    
        private String name;
    
        private Author author;
    
    
    
        public Book(String name, Author author) {
    
            this.name = name;
    
            this.author = author;
    
        }
    
    
    
        public String getName() {
    
            return name;
    
        }
    
    
    
        public void setName(String name) {
    
            this.name = name;
    
        }
    
    
    
        public Author getAuthor() {
    
            return author;
    
        }
    
    
    
        public void setAuthor(Author author) {
    
            this.author = author;
    
        }
    
    
    
    }
    
    
    
    
    • Author.class
    
    package com.hnucm.androiddemo.Model;
    
    
    
    //对象
    
    public class Author {
    
        private String name;
    
        private int age;
    
    
    
        public Author(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;
    
        }
    
    
    
    }
    
    
    
    
  • 将对象转换为json格式,使用Intent传递(序列化)

    • MainActivity
    
    package com.hnucm.androiddemo.Controller;
    
    
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    
    import android.os.Bundle;
    
    import android.view.View;
    
    import android.widget.Button;
    
    import com.google.gson.Gson;
    
    import com.hnucm.androiddemo.Model.Author;
    
    import com.hnucm.androiddemo.Model.Book;
    
    import com.hnucm.androiddemo.R;
    
    
    
    public class MainActivity extends AppCompatActivity {
    
    
    
        @Override
    
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
    
    
            Button button = findViewById(R.id.button);
    
            button.setOnClickListener(new View.OnClickListener() {
    
    
    
    

尾声

最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

InstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);



        Button button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {

尾声

最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

进阶学习视频

[外链图片转存中…(img-SrI5vzDI-1726011797212)]

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-MJpzmElW-1726011797213)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值