2011-11-19 59 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]; 
      } 
    }; }