2011-11-19 61 views
7

所以我正在實現一個測試應用程序,我將創建一個Tournament對象作爲Parcelable並將它們在意圖之間傳遞。 比賽包括: 。比賽名稱 。規則 。匹配球員的規則(隨機/手動) 。玩家用ArrayList實現Android Parcelable實現<Object>

的數組列表,這是我到目前爲止有:

Tournament.java

public class TournamentData implements Parcelable { 
private String tourName; 
private int bestOf; 
private boolean isRandom; 
private ArrayList<Player> playerList; 

public TournamentData(String name, int tourBestOf, boolean random) { 
    this.tourName = name; 
    this.bestOf = tourBestOf; 
    this.isRandom = random; 
} 

public void addPlayer(Player newPlayer) { 
    this.playerList.add(newPlayer); 
} 

public ArrayList<Player> getPlayerList() { 
    return playerList; 
} 

    /* getters and setters excluded from code here */ 

    public int describeContents() { 
    // TODO Auto-generated method stub 
    return 0; 
} 

public void writeToParcel(Parcel out, int flags) { 
    // TODO Auto-generated method stub 

} 

Player.java

public class Player { 

private String playerName; 
private String playerEmail; 

public Player(String name, String email) { 
    this.playerName = name; 
    this.playerEmail = email; 
} 
    /* getter and setters are excluded */ 

}

我a米新的Android(我的意思是非常非常新; 10個小時,我猜)。所以我想知道: 。給定具有ArrayList的錦標賽對象的規格,是否可以創建一個Parcelable對象? 。如何將所有聯賽數據存儲到Parcelable對象中並從其他活動中訪問它們? (即A和B)。

+2

結帳這個答案,對如何完整的示例使用Parcelable分析arrayList。 http://stackoverflow.com/questions/7400564/android-parcelable-retailerorderactivity-java-return-null/7400675#7400675 –

+0

@LalitPoptani:玩家對象也必須是Parcelable嗎? –

+0

是的,它更好地做到這一點。 –

回答

0

很多這些東西變成是RPC的 - 我會寫在傳統的Java工作的主要部分,然後儘量使......

沒錯,果然:

可通過IBinder發送的消息(數據和對象引用)的容器。一個Parcel可以同時包含在IPC的另一端(使用這裏寫入特定類型的各種方法,或者通用的Parcelable接口)的平坦數據,以及引用另一端的IBinder對象的引用一個代理IBinder與包裹中的原始IBinder連接。

換句話說包裹是進程間通信的一種形式....

,你必須重新思考的基礎模型,因爲這不是一個10,000個請求第二服務器 - 它是什麼,是一個手-held消費裝置,可以只拉指針關閉進程表,如果它有,因爲在其運營

我已經學會去博客標籤在http://android-developers.blogspot.com/?hl=en

非常小心,不要鑽進入深入需要在工作者線程和不需要的東西忒豐富的同步原語的Java技術,使用方便

多線程對性能

發佈者蒂姆·佈雷2010年7月19日在上午11時41 本帖是吉爾斯Debunne,工程師在喜歡多任務的Android團隊中。蒂姆 - 佈雷]

它在博客---更好的地方開始

2

這裏是代碼,告訴你如何parcle一個ArrayList的

public class ParcleListTopic implements Parcelable{ 
    private List<ParcleTopic> list; 
    private ArrayList<HoldListTopic> listh=new ArrayList<HoldListTopic>(); 
    public ArrayList<HoldListTopic> GetListTopic() 
    { 
     for(int i=0;i<list.size();i++) 
     { 
      listh.add(list.get(i).GetHold()); 
     } 
     return listh; 
    } 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeTypedList(list); 
    } 
    public ParcleListTopic(Parcel in) 
    { 
     in.readTypedList(list,ParcleTopic.CREATOR); 

    } 
    public ParcleListTopic(List<ParcleTopic> list) 
    { 
     this.list=list; 
    } 
    public static final Parcelable.Creator<ParcleListTopic> CREATOR = new Parcelable.Creator<ParcleListTopic>(){ 
      public ParcleListTopic createFromParcel(Parcel s) 
      { 
       return new ParcleListTopic(s); 
      } 
      public ParcleListTopic[] newArray(int size) 
      { 
       return new ParcleListTopic[size]; 
      } 
    }; 
    public int describeContents() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 
} 


public class ParcleTopic implements Parcelable 
{ 
    HoldListTopic hold; 
    public ParcleTopic(HoldListTopic hold) 
    { 
     this.hold=hold; 
    } 
    public HoldListTopic GetHold() 
    { 
     return hold; 
    } 
    public int describeContents() 
    { 
     return 0; 
    } 
    public void writeToParcel(Parcel dest, int flags) 
    { 
     dest.writeString(hold.Title); 
     dest.writeString(hold.Date); 
     dest.writeInt(hold.NumberComment); 
     dest.writeInt(hold.ID); 
    } 
    public ParcleTopic(Parcel in) 
    { 
     hold.Title=in.readString(); 
     hold.Date=in.readString(); 
     hold.NumberComment=in.readInt(); 
     hold.ID=in.readInt(); 
    } 
    public static final Parcelable.Creator<ParcleTopic> CREATOR = new Parcelable.Creator<ParcleTopic>() 
    { 
      public ParcleTopic createFromParcel(Parcel s) 
      { 
       return new ParcleTopic(s); 
      } 
      public ParcleTopic[] newArray(int size) 
      { 
       return new ParcleTopic[size]; 
      } 
    }; }