【问题标题】:Why does an ArrayList<MyClass> suddenly change its values为什么 ArrayList<MyClass> 突然改变它的值
【发布时间】:2017-06-30 09:04:42
【问题描述】:

我得到了一个充满Measure 对象的ArrayList&lt;MyClass&gt;,我是从手机的加速度传感器得到的。这些对象有另一个 ArrayList,其中包含 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 方法。我的类中没有静态字段。

【问题讨论】:

标签: java android android-studio arraylist


【解决方案1】:

"al_SavedAccValues" 从内存的某一点开始总是相同的 ArrayList。 在“SaveSwingINI”方法中创建一个新的“al_SavedAccValues”数组列表 很有帮助。

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);
        }
    }

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2019-06-20
    相关资源
    最近更新 更多