转载请注明原创出处,谢谢!
- GitHub: @Ricco
起因
先介绍一下我自己的情况,大学专科应届生,3年Java学习,2年Android学习,利用实习的时间,去达内又培训Android4个月,软件专业。由于利用实习时间去培训,所以造成了一个比较尴尬的结果,0工作经验。。。
但投出去的简历还不至于石沉大海,有了一个面试机会,面试过程中的问题,接下来几天,会给大家写出来,今天就来第一道。
- 面试官:Intent可以传递什么类型数据?
- 我的内心世界:哈哈。我刷过这到面试题,基本的数据类型,Bundle,Serializable对象,Parcelable对象等等。
- 我的回答:什么都可以!
- 面试官:(懵了,但好像想抢救一下我)Intent怎么传递对象,有没有不能传的?
- 我的回答:实现Serializable或者Parcelable接口。。。Activity之间利用Intent可以实现任何数据的传递。
- 面试官:(迷之微笑,诡异目光!)
经过
回家之后,开始反思自己今天的面试问题,发现了这个问题回答的不是很完美。但我的回答没错啊,利用Intent可以实现任何数据的传递
接下来开始我的论证
- 传递对象用Serializable还是Parcelable,我选Parcelable,虽然Serializable的方式比较简单,但由于把整个对象进行序列化,因此效率会比Parcelable方式低一些。
- Parcelable实现好难,怎么写?
写什么写?
打开File -> Settings -> Pugins -> Browse Repositories 如下,输入Android Parcelable code generator:
自动化实现Parcelable插件.PNG
安装好了之后重启 - 打开你写的Bean类
![](https://img.haomeiwen.com/i4325663/a6ea2ceeba0c8d2a.png)
![](https://img.haomeiwen.com/i4325663/4f7ed52f64c72e2a.png)
OK,搞定,看最终代码
import android.os.Parcel;
import android.os.Parcelable;
public class Student implements Parcelable {
private String name;
private int age;
private String other;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
dest.writeInt(this.age);
dest.writeString(this.other);
}
public Student() {
}
protected Student(Parcel in) {
this.name = in.readString();
this.age = in.readInt();
this.other = in.readString();
}
public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
@Override
public Student createFromParcel(Parcel source) {
return new Student(source);
}
@Override
public Student[] newArray(int size) {
return new Student[size];
}
};
}
- 回到问题,发现,只要是实现Palcelable的,就可以被Intent传递,那还有什么是Intent不能传递的?
- File,你不会传递文件地址吗?
- Bitmap,把它变成图片,你不会传递文件地址吗?
- 你不会传递文件地址吗?
- 貌似Intent传递数据,有大小限制,具体大小不清楚,没见过这方面的错误,看一个帖子,一个值,很烦!
- 附传递和接收代码
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("student_data", new Student());
startActivity(intent);
Student student = (Student) getIntent().getParcelableExtra("student_data");
结果
我的论证个人认为成功了,但我的面试2个字母形容:GG!
有可能是我回答的问题,漏洞太大,太惊人了吧。
他问我坚持了这么久是为了什么 ?
我说我没有坚持因为喜欢所以快乐!
网友评论