我有一个调用函数requestAudioBlocks来请求一些数据的程序。在其中,它初始化一个数组,然后调用数据请求。
private ReadAudioData[] receivedAudioMessages;
private int receivedMessageCount;
private boolean requestAudioBlocks(long blocksPerRequest)
{
receivedAudioMessages = new ReadAudioData[2];
receivedMessageCount = 0;
connection.sendRequest(); //Send the command
}
运行 connection.sendRequest 时,connection.sendRequest调用saveAudioBlocks,向其发送要放入数组的变量下载。
private ReadAudioData audioDataPacket;
public void sendRequest()
{
ReadAudioData readAudioData;
while (int count = 0; count < 2; count++)
{
readAudioData = new ReadAudioData();
//Add the received information into the readAudioData variable
audioDataPacket = readAudioData;
saveAudioBlocks(audioDataPacket);
}
}
每次收到新的 ReadAudioData 对象时,都会调用 saveAudioBlocks。
public void saveAudioBlocks(ReadAudioData download)
{
receivedAudioMessages[receivedMessageCount] = download;
receivedMessageCount++;
}
在程序运行过程中,saveAudioBlocks被调用了两次,应该将两个ReadAudioData对象放入数组receivedAudioMessages中。
它第一次起作用,因为正确的ReadAudioData对象进入receivedAudioMessages[0]。
ReadAudioData对象有一个变量 String,在本例中为"111"。如果您在saveAudioBlocks中的receivedMessageCount++行放置一个断点,您可以查看数组,它包含带有字符串变量“111”的ReadAudioData对象,因为它应该位于位置0。
但是,当使用新的 ReadAudioData 对象再次调用saveAudioBlocks时,如果查看位置 0 处的receivedAudioMessages数组,则ReadAudioData对象是传递给函数的变量download中包含的新ReadAudioData对象,其中包含 String 变量“122”。
就好像我在数组中保存了指向变量下载的指针,而不是当前的实际对象。
我也尝试过使用 ArrayLists,但也会出现同样的问题。
我在saveAudioBlocks有一个断点,以确保在我不知道且不知道时不会调用它来替换数据。
任何人都可以帮忙吗?