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

时间:2011-06-22 06:17:22

标签: android design-patterns

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

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

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();

在活动之间传递数据的好方法是什么?由于IntentShredPrefrence用于传递小型数据单元,我在此不予考虑。

2 个答案:

答案 0 :(得分: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);
    }

}

以下是发生的事情。如果实现Parcelable接口,则必须创建一个私有构造函数,该构造函数将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);

答案 1 :(得分:3)

您可以使用Android中的应用程序类在活动之间传递数据。

这是一个很好的链接.. http://www.helloandroid.com/tutorials/maintaining-global-application-state