関数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が2回呼び出され、2つのReadAudioDataオブジェクトが配列receivedAudioMessagesに配置されます。
正しいReadAudioDataオブジェクトがreceivedAudioMessages[0]に入るので、これは最初に機能します。
ReadAudioDataオブジェクトには変数Stringがあり、この場合は「111」です。ブレークポイントをsaveAudioBlocksのreceivedMessageCount++の行に配置すると、配列を調べることができ、位置0にあるはずの文字列変数「111」を持つReadAudioDataオブジェクトが含まれます。
ただし、saveAudioBlocksが新しいReadAudioDataオブジェクトで再度呼び出された場合、位置0のreceivedAudioMessages配列を見ると、 ReadAudioDataオブジェクトは、関数に渡された変数downloadに含まれる新しいReadAudioDataオブジェクトであり、文字列変数「122」が含まれています。
これは、変数downloadへのポインターを配列に保存しているようであり、現在の実際のオブジェクトではありません。
ArrayListsも使用しようとしましたが、同じ問題が発生します。
saveAudioBlocksにブレークポイントがあり、それが呼び出されていないことを確認して、気づいていないときにデータを置き換えています。
誰か助けてもらえますか?