2011-06-22 26 views
2

在我的应用程序中,我从JavaScript中获取数据,因为无法将数据作为数组或对象返回,因此我将它作为String返回。在Android中的活动之间传递数据的更好方法

现在组织数据我创建一个类,其中包含ArrayList s和其他字符串变量,并进一步我创建我的类对象变量数组来存储多个记录。

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

什么是一种很好的方法来在活动之间传递数据?由于Intent s和ShredPrefrence s用于传递小数据单位,我在这里没有考虑它。

回答

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保存所有的序列化值。

您必须实现名为CREATOR的嵌套类Parcelable.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); 
+0

那么这真的很好的解释,但我使用Parcelable和应用程序类之间混淆,所以你有什么建议? – Hunt

+0

我想它很大程度上取决于用例,但在你的情况下,我会推荐'Parcelables'。 –

+0

好的,因为我有一个非常沉重的数据使用量,所以我会去与parcelables。 – Hunt

相关问题