在Android中的活动之间传递数据的更好方法

Hun*_*unt 2 android design-patterns

在我的应用程序中,我从JavaScript获取数据,因为无法将数据作为数组或对象返回,我将其作为String返回.

现在要组织数据我正在创建一个包含ArrayLists和其他字符串变量的类,而且我正在创建我的类对象变量数组来存储多个记录.

public class Data {

    ArrayList<String> m_empArrayList = new ArrayList();
    ArrayList<String> m_depArrayList = new ArrayList();
    String m_time;
    String m_duration;

}

Data d = new Data();
Run Code Online (Sandbox Code Playgroud)

在活动之间传递数据的好方法是什么?由于Intents和ShredPrefrences用于传递小的数据单元,我在这里不考虑它.

Oct*_*ean 7

Parcelable在自定义对象中实现接口并通过Intent.

这是一个Parcelable对象的例子.

public class MyObject implements Parcelable {

    private String someString = null;
    private int someInteger = 0;

    public MyObject() {
        // perform initialization if necessary
    }

    private MyObject(Parcel in) {
        someString = in.readString();
        someInteger = in.readInt();
    }

    public static final Parcelable.Creator<MyObject> CREATOR =
            new Parcelable.Creator<MyObject>() {

        @Override
        public MyObject createFromParcel(Parcel source) {
            return new MyObject(source);
        }

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

    };

    // Getters and setters

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(someString);
        dest.writeInt(someInteger);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是发生了什么.如果实现了Parcelable接口,则必须创建一个私有构造函数,该构造函数将a Parcel作为参数.这Parcel包含所有序列化值.

您必须Parcelable.Creator使用名称实现嵌套类,CREATOR因为在重新创建对象时Android将调用此类.

该方法describeContents()仅用于特殊情况.您可以保留原样,返回值为0.

有趣的行为发生在writeToParcel()你的名字告诉你将数据写入Parcel对象的地方.

现在,您可以Intent在此示例中直接将自定义对象添加到类似对象中.

MyObject myObject = new MyObject();
Intent i = new Intent();
i.setExtra("MY_OBJECT", myObject);
// implicit or explicit destination declaration
startActivity(i);
Run Code Online (Sandbox Code Playgroud)