0%

Activity数据传递

Activity之间的数据传递

这个就比较典型,就和Windows下一样,但是比Windows下方便许多,只需要调用几个比较简单的方法就可以进行数据的传递。

基本数据类型的传递

基本数据类型的传递是最简单得了相比之下,我们只需要使用一个成员方法写入数据就可以了,

1
intent.putExtra("Data",test);

这个putExtra方法有许多重载,基本数据类型都包含了,在我们的接收端我们只需要调用:

1
2
Bundle bundle = getIntent().getExtras();
bundle.getString("Data");

这个样子我们就能成功进行数据之间的交互了。

类的传递

类的传递分为两种方法,一种是Java自带的,另一种是Android提供给我们的,各有好处,下面进行介绍。

序列化传递

序列化的传递方法,就是将我们的类实现序列化,然后再传递的时候使用就好了,这个方法也是比较简单的,但是是有缺点的,因为序列化是持久化的一个操作,所以会在本地生成数据,具体的实现方法:

  1. 传递类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.example.lx;

import java.io.Serializable;

public class push implements Serializable{
private String Name;
public void SetName (String name) {
Name = name;

}
public String GetName () {
return Name;
}
}
  1. 发送端
1
2
3
push test = new push();
test.SetName("iii");
intent.putExtra("Data",test);
  1. 接收端
1
2
3
private EditText edt01;
edt01 = (EditText)findViewById(R.id.editText1);
edt01.setText(((push)bundle.get("Data")).GetName());

这个样子就可以进行数据的交互了,多了一步序列化和强制转换,也是相对而言方便的。

Parcelable传递

这个方法有点繁琐,但是比较固定,就是说不是太需要理解为啥这样写,反正按模式进行些就好了,我们同样还是先写类:

  1. 传递类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.example.lx;


import android.location.Criteria;
import android.os.Parcel;
import android.os.Parcelable;

public class push implements Parcelable{
private String Name;
private String Age;

public void SetName (String name) {
Name = name;

}
public String GetName () {
return Name;
}
public static Parcelable.Creator<push> CREATOR = new Creator<push>() {

@Override
public push createFromParcel(Parcel source) {
push test = new push();
test.setAge(source.readString());
test.SetName(source.readString());
return test;
}

@Override
public push[] newArray(int size) {
return null;
}

};


@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(Age);
dest.writeString(Name);

}
public String getAge() {
return Age;
}
public void setAge(String age) {
Age = age;
}
}

发送端接收端不变,和我们序列化的时候操作是一样的,这里稍微有一写要说的。

  • 必须要有个静态成员public static Parcelable.Creator<push> CREATOR = new Creator<push>()然后实现里面的两个方法
  • writeToParcel这个里面的顺序要和createFromParcel这个里面的顺序是一致的,否则应该会出现错误
  • createFromParcel这个方法最后需要返回我们new的那个对象。

这个方法的好处其实就是不是本地写入,是在内存中进行读写,而且速度要快一些,但是就是有一点繁琐。