Java 如何在Android Studio中使用ArrayList get()方法

Java 如何在Android Studio中使用ArrayList get()方法,java,android,Java,Android,我在Android Studio中使用ArrayList(short[])编写了一个代码,但是当我使用get()方法时,它总是返回存储的最后一个数据,我不知道为什么。我使用了两个按钮,一个是executeadquirir\u audio()来存储一些值。第二个在控制台中使用for循环打印存储的数据,但它总是返回相同的值 代码如下: public class MainActivity extends AppCompatActivity { private static String TAG =

我在Android Studio中使用
ArrayList(short[])
编写了一个代码,但是当我使用
get()
方法时,它总是返回存储的最后一个数据,我不知道为什么。我使用了两个按钮,一个是execute
adquirir\u audio()
来存储一些值。第二个在控制台中使用for循环打印存储的数据,但它总是返回相同的值

代码如下:

public class MainActivity extends AppCompatActivity {

private static String TAG = "AudioClient";

//Instancia de elementos de la interfaz de usuario.
Button btniniciar;
Button btnfiltrar;
TextView  lblfiltro;
RadioGroup radioGroup;
RadioButton radioButton;

boolean grabar = false;

private static int BUFFER_SIZE2 =16;

public static short[] buffer_debug    = new short[BUFFER_SIZE2];

public List<short[]> datos_short = new ArrayList<>();


private Thread myThread;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Identificando componentes de la IU.
    radioGroup = (RadioGroup) findViewById(R.id.RadioGroup);
    btniniciar = (Button) findViewById(R.id.btnIniciar);
    btnfiltrar = (Button) findViewById(R.id.btnFiltrar);
    lblfiltro = (TextView) findViewById(R.id.lblFiltro);

    lblfiltro.setText("Filtro: -- \n Orden: -- \n Fstop: --");

    btniniciar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            grabar = !grabar;
            btniniciar.setText(grabar == true? "parar" : "iniciar");
            if (grabar){
                adquirir_audio();

            }
            else{

            }
        }
    });

    btnfiltrar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            for(int i = 0; i < datos_short.size(); i++){
                Log.d(TAG, "Buffer guardado: "+i + Arrays.toString(datos_short.get(i)));
            }
        }
    });

}

public void adquirir_audio(){

    int dir = 0;
    int dir2 = 0;

    while (dir < 5) {

    buffer_debug[0] = (short) (dir2 * 16);
    buffer_debug[1] = (short) (dir2 * 16 + 1);
    buffer_debug[2] = (short) (dir2 * 16 + 2);
    buffer_debug[3] = (short) (dir2 * 16 + 3);
    buffer_debug[4] = (short) (dir2 * 16 + 4);
    buffer_debug[5] = (short) (dir2 * 16 + 5);
    buffer_debug[6] = (short) (dir2 * 16 + 6);
    buffer_debug[7] = (short) (dir2 * 16 + 7);
    buffer_debug[8] = (short) (dir2 * 16 + 8);
    buffer_debug[9] = (short) (dir2 * 16 + 9);
    buffer_debug[10] = (short) (dir2 * 16 + 10);
    buffer_debug[11] = (short) (dir2 * 16 + 11);
    buffer_debug[12] = (short) (dir2 * 16 + 12);
    buffer_debug[13] = (short) (dir2 * 16 + 13);
    buffer_debug[14] = (short) (dir2 * 16 + 14);
    buffer_debug[15] = (short) (dir2 * 16 + 15);

    Log.d(TAG, "Buffer: " + dir2 + Arrays.toString(buffer_debug));

    datos_short.add(dir,buffer_debug);

    dir = dir + 1;
    dir2 = (dir2 + 1);}}}
public类MainActivity扩展了AppCompatActivity{
私有静态字符串TAG=“AudioClient”;
//乌萨里奥国际艺术节。
按钮btniniciar;
按钮btnfiltrar;
文本视图lblfiltro;
放射组放射组;
单选按钮单选按钮;
布尔grabar=false;
专用静态int缓冲区_SIZE2=16;
publicstaticshort[]buffer_debug=newshort[buffer_SIZE2];
public List datos_short=new ArrayList();
私有线程读取;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//确定所有的组成部分。
放射组=(放射组)findViewById(R.id.radioGroup);
btninicar=(按钮)findViewById(R.id.btninicar);
btnfiltrar=(按钮)findviewbyd(R.id.btnfiltrar);
lblfiltro=(TextView)findViewById(R.id.lblfiltro);
lblfiltro.setText(“Filtro:-\n Orden:-\n Fstop:-”;
btninicar.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
格拉巴=!格拉巴;
btninicar.setText(grabar==true?“parar”:“iniciar”);
如果(格拉巴){
adquirir_audio();
}
否则{
}
}
});
btnfiltrar.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
对于(int i=0;i
这是控制台


希望您能帮助我。

您的数组只有一个元素

您正在以这种方式填充阵列

public void adquirir_audio(){
    int dir = 0:
    //some code
    datos_short.add(dir,buffer_debug); //here you are inserting an element at 0 position, always
}
试试这个

public void adquirir_audio(){
    int dir = 0:
    //some code
    datos_short.add(buffer_debug); //this will add a new element at the end
}

在java中,
Arrays
不是一种基本类型,您总是在
ArrayList
的所有元素中更改相同的
buffer\u debug
对象

您可以使用以下内容:

public void adquirir_audio(){

        short[] buffer_debug;
      
        int dir = 0;
        int dir2 = 0;

        while (dir < 5) {

            //Initialize a new Array
            buffer_debug = new short[16];  //<---

            buffer_debug[0] = (short) (dir2 * 16);
            buffer_debug[1] = (short) (dir2 * 16 + 1);
            //...

            datos_short.add(dir,buffer_debug);
            //...
       
       }
}
public void adquirir_audio(){
短[]缓冲区调试;
int dir=0;
int-dir2=0;
while(dir<5){
//初始化一个新数组

buffer_debug=new short[16];//谢谢回答!!我以前也这样做过,但是每次存储最后一个数据的结果都是一样的。变量“dir”在while循环中以“dir=dir+1”递增好的,然后将dir变量放在adquirir\u audio方法之外,就像声明datos\u short一样,并删除int dir=0行;
add
并不是这样做的。该函数实际上应该命名为“insert”。列表中确实有多个元素,这不是问题所在。
buffer\u debug
始终是同一个对象。修改它时,修改已插入数组中的同一个对象。