Java 如何在Android Studio中使用ArrayList get()方法
我在Android Studio中使用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 =
ArrayList(short[])
编写了一个代码,但是当我使用get()
方法时,它总是返回存储的最后一个数据,我不知道为什么。我使用了两个按钮,一个是executeadquirir\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
始终是同一个对象。修改它时,修改已插入数组中的同一个对象。