2011-06-22 9 views
2

私のアプリケーションでは、データを配列やオブジェクトとして返すことができないため、JavaScriptからデータをフェッチしています。Androidのアクティビティ間でデータをやりとりするより良い方法

データを整理する私はArrayListと他の文字列変数を含むクラスを作成しています。さらに、複数のレコードを格納する変数classの配列を作成しています。

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は、小さな単位のデータを渡すために使用されているため、ここでは考慮しません。

答えて

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); 
+0

これは本当にうれしい説明ですが、ParcelableとApplicationクラスの使い分けが混乱しています。何をお勧めしますか? – Hunt

+0

私はそれがユースケースに大きく依存していると思いますが、あなたのケースでは 'Parcelables'をお勧めします。 –

+0

さて、私はかなり重いデータの使用を持っているので、私はパーセルブルと一緒に行くでしょう。 – Hunt

関連する問題