java - 为什么数组每次都重新初始化?

标签 java android

我有这个问题要问你:

我写了这段代码:

public class MainActivity extends Activity implements SensorEventListener {
    private SensorManager mSensorManager;
    private Sensor mSensor;
    ArrayList<String> oldvalue  = new ArrayList<String>();
    int count;

    @Override
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        setContentView(R.layout.activity_main);
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mSensorManager.registerListener((SensorEventListener) this, mSensor,         SensorManager.SENSOR_DELAY_NORMAL);
        count = 0;
        //oldvalue = null;

    }

    @Override
    protected void onPause() {
        super.onPause();
        //mSensorManager.unregisterListener(this);
    }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    public void onSensorChanged(SensorEvent event) {
        String x,y,z;
        Float xnum,ynum,znum;
        TextView xtextview,ytextview,ztextview = new TextView(this);

        if (oldvalue == null || oldvalue.size()<1) {
        String statoarray = "null or 0";
        Toast.makeText(this, statoarray, Toast.LENGTH_SHORT)
          .show();
        }
        else {
            String statoarray = String.valueOf(oldvalue.size());
            Toast.makeText(this, statoarray, Toast.LENGTH_SHORT)
              .show();
        }


        if (oldvalue.size()<2) 
        {
            xtextview=(TextView)findViewById(R.id.x); 
            ytextview=(TextView)findViewById(R.id.y);
            ztextview=(TextView)findViewById(R.id.z);

            xnum = event.values[0];
            ynum = event.values[1];
            znum = event.values[2];

            oldvalue.add(String.valueOf(xnum));
        oldvalue.add(String.valueOf(ynum));
        oldvalue.add(String.valueOf(znum));


        x = Float.toString(Math.round(xnum));
        y = Float.toString(Math.round(ynum));;
        z = Float.toString(Math.round(znum));;

        xtextview.setText(x);
        ytextview.setText(y);
        ztextview.setText(z);   
        }

        //Toast.makeText(this, "pieno", Toast.LENGTH_SHORT)
        //.show();
    }


}

所以我不明白,因为每次改变 x y z 的值时,数组都会重新初始化自己...

我需要在数组中存储更多的 cicle 值

非常感谢

最佳答案

因为您在 onSensorChanged()

中初始化它们

所以当设备移动很少时,onSensorChanged() 被调用并且所有

 String x,y,z;
        Float xnum,ynum,znum;
        TextView xtextview,ytextview,ztextview = new TextView(this);

这些以及其他初始化onSensorChanged() 的东西被重新初始化

so Declare these inside class

并使用该类中的任何地方

关于java - 为什么数组每次都重新初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18111704/

相关文章:

android - 超过 3g 的 HttpsURLConnection server_name 已损坏(?)

android - Flutter - 无法获取 'https://google.bintray.com/exoplayer/com/google/android/gms/play-services-location/maven-metadata.xml'。收到状态码403

android - 通过 Android Studio 将大型应用程序传输到 Android Wear

java - 无法为 org.gradle.api.internal.artifacts.dsl.dependency.DefaultDependencyHandler 类型的对象设置未知属性 'nav_version'

java - 基于对象类重写java中的打印语句

java - Spring 上传文件

java - 如何从 26 API 以上的后台应用程序启动 Activity ?

java - Kotlin 函数式接口(interface) java 兼容性

Java JVM 或 Eclipse 启动开销

android - Gallery OnActivityResult 在 TabActivity 中不起作用