java - 为什么 ArrayList<MyClass> 突然改变它的值

标签 java android android-studio arraylist

我得到了一个ArrayList<MyClass>充满 Measure物体,我从手机的加速度传感器获得。这些对象有另一个包含 150 个度量值的 ArrayList。当我在调试时调查这个数组列表时,它被正确填充。但是当我想通过按钮事件获取 ArrayList 后,值发生了变化。里面的对象数量保持不变,但它始终是一个相同的对象,之前不在 ArrayList 中。我希望,你能给我一些提示,告诉我该怎么做。太困惑了...

public class StartDesk extends AppCompatActivity implements SensorEventListener{

    private ArrayList<SingleSwing> alSwingsCurSession;
    private ArrayList<SingleAccValue> alSavedAccValues;
    private AudioSensorClass asc;


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

        alSavedAccValues = new ArrayList<>();
        bRecording = false;

        btnStart = (Button) findViewById(R.id.btnStart);
        btnStart.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                RecordButtonHandler();
            }
        });

    }

    private void RecordButtonHandler() {
        if(!bRecording) {
            alSwingsCurSession = new ArrayList<>();
            ...

        }
        else {
            btnStart.setText("Start Recording");
            if (alSwingsCurSession.size() > 0) {
               ...
            }
            bRecording = false;
        }
    }


   ...


    private void SaveSwingINI(ArrayList<SingleAccValue> al_SavedAccValues) {
        if(al_SavedAccValues.size()>=150) {
            SingleSwing swing = new SingleSwing();
            swing.setAl_MeasureData(al_SavedAccValues);
            alSwingsCurSession.add(swing);
        }
    }
...
}

alSwingsCurSession有其他值,当在按钮事件中调用它时,它会进入SaveSwingINI方法。我的类中没有静态字段。

最佳答案

“al_SavedAccValues”在内存的某一点始终是相同的 ArrayList<>。 在“SaveSwingINI”方法中创建一个新的“al_SavedAccValues”Arraylist 很有帮助。

private void SaveSwingINI(ArrayList<SingleAccValue> al_SavedAccValues) {
        if(al_SavedAccValues.size()>=150) {
            SingleSwing swing = new SingleSwing();
            ArrayList<SingleAccValue> al_SwingValues = new ArrayList<>(al_SavedAccValues);
            swing.setAl_MeasureData(al_SwingValues);
            alSwingsCurSession.add(swing);
        }
    }

关于java - 为什么 ArrayList<MyClass> 突然改变它的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186093/

相关文章:

java - 无法从 ADFS 服务器获取 SAML 响应

android - 在 React Native Android 中使用开发模式中包含的 js 包打包 apk

java - Android Studio : how to add and use project as library, 不是模块

java - 仅当我从 Playstore 下载时才会在应用程序中出现此登录问题

java - 如何提高迭代 130 多个项目并将它们上传到 aws s3 的性能

java - 导入文件时打印时未出现字符?

java - Android 测试构造函数中的异常 NoClassDefFoundError

android - 错误 : Some conflicts were found on updating Android studio 3. 1

java - .add() 在 Swing 中使用多个参数

java - Android 8 位到 16 位负数表示