Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 整个ArrayList包含相同的数据_Java_Android - Fatal编程技术网

Java 整个ArrayList包含相同的数据

Java 整个ArrayList包含相同的数据,java,android,Java,Android,我创建了以下方法,为用户电话簿中的每个联系人添加姓名和号码: PlayerDetails contactPlayer = new PlayerDetails(); public PlayerList getContacts(){ ContentResolver cr = calledActivity.getContentResolver(); Cursor contactList = cr.query(ContactsContract.CommonDataKinds.Phone

我创建了以下方法,为用户电话簿中的每个联系人添加姓名和号码:

PlayerDetails contactPlayer = new PlayerDetails();

public PlayerList getContacts(){
    ContentResolver cr = calledActivity.getContentResolver();
    Cursor contactList = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
    while (contactList.moveToNext()){
        contactPlayer.name = contactList.getString(contactList.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        contactPlayer.number = contactList.getString(contactList.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        playerNameNumber.myPlayers.add(pos,contactPlayer);

        //playerNameNumber.add(pos,name + " " + phoneNumber);
        pos++;
    }
    return playerNameNumber;
}
但每个位置包含相同的数据。 当我调试时,我可以看到在while循环中,它通过每个联系人,在contactPlayer.name和number,它每次都有一个不同的联系人,但在: playerNameNumber.MyPlayer.add将数据添加到每个位置。 那么playerNameNumber[0]和playerNameNumber[1]具有相同的联系信息

playerNameNumber is an object with the following:

ArrayList<PlayerDetails> myPlayers = new ArrayList<>();

    void addPlayer(PlayerDetails player){
        myPlayers.add(player);

        }
是while循环导致了这个问题吗? 另外,我知道我有“pos”,但我确定我不需要这个


为什么“添加”用相同的数据替换arraylist中的每个项目?

对于相同的contactPlayer您正在分配新的名称和号码。
无法查看其在循环中的实例化位置。因此,每次将它们添加到列表中时,它们都指向同一对象,并且将包含循环中最后添加的名称和号码。

对于相同的contactPlayer您正在分配新的名称和号码。
无法查看其在循环中的实例化位置。因此,每次将它们添加到列表中时,它们都指向同一个对象,并且将包含循环中最后添加的名称和编号。

您必须在每次运行
时实例化
播放详细信息,而
循环将指向同一位置(最后一个联系人)


每次运行
循环时,您必须实例化
PlayerDetails
,否则它将指向同一位置(最后一个联系人)


看起来您正在添加相同的对象引用。在
moveToNext()
之后,是否需要创建一个新的contactPlayer,然后设置名称和号码?contactPlayer实例在哪里?在while循环中看不到它,并且您调用列表attribute myplayers的add方法(但是为什么要使用addPlayer方法)在添加时创建一个新实例。@KevinO-Yea I doIt看起来您正在添加相同的对象引用。在
moveToNext()
之后,是否需要创建一个新的contactPlayer,然后设置名称和号码?contactPlayer实例在哪里?在while循环中看不到它,您也调用了list attribute myplayers的add方法(但为什么要使用addPlayer方法)在添加时创建一个新实例。@KevinO-Yea I doIt是在类中全局添加的,但我认为在while循环中它会将其设置为新的名称和编号?它是在类中全局添加的,但是我认为在while循环中它会将其设置为新的名称和编号?它会在类中全局添加,但我认为在while循环中它会将其设置为新的名称和编号?它会在类中全局添加,但我认为在while循环中它会将其设置为新的名称和编号?
   int id;
    String name;
    String number;
public PlayerList getContacts(){
    ContentResolver cr = calledActivity.getContentResolver();
    Cursor contactList = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
    while (contactList.moveToNext()){
        contactPlayer = new PlayerDetails();
        contactPlayer.name = contactList.getString(contactList.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        contactPlayer.number = contactList.getString(contactList.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        playerNameNumber.myPlayers.add(pos,contactPlayer);

        //playerNameNumber.add(pos,name + " " + phoneNumber);
        pos++;
    }
    return playerNameNumber;
}