0

加速度計からLinkedList値に追加しようとしています。

private LinkedList<Float> rawValues = new LinkedList<Float>();
public void onSensorChanged(SensorEvent event)
{
    int eventType = event.sensor.getType();

    switch(eventType)
    {
        case Sensor.TYPE_ACCELEROMETER:
            float accelerometer_z = event.values[2];


                     rawValues.add(accelerometer_z);

                     /**
                      * This printout gives me positions and event values
                      */
                     System.out.println("getAccelerometer size: " +                 
                     rawValues.size() + " entry: " + rawValues.getLast());

            break;
    }
}

これまでのところ、期待どおりに測定値と数値の位置を取得しています。ただし、他の方法でリストを操作しようとすると、空のように見えます。

public String[] getVelocity()
{
    String[] velocityString = {"42","42"};
    String values = "";
    String theInteger = "";

    /**
     * Returns a 0 size...
     */
    int theSize = rawValues.size();

    System.out.println("getVelocity size: " + theSize);

    LinkedList<Float> slopeValues = calculateSlopeValues( rawValues);

    for (int i = 0; i < theSize; i++)
    {
        values += "Raw:"+i+ " " + String.valueOf(rawValues.get(i)) + "\n";
        values += "\tSlope:"+i+ " " + String.valueOf(slopeValues.get(i)) + "\n";
    }

    theInteger = String.valueOf(Math.round(Collections.max(slopeValues)*100));

    /**
     * After adding everything to local variables, the list is cleared.
     */
    slopeValues.clear();

    velocityString[0] = theInteger;
    velocityString[1] = values;


    return velocityString;
}

getVelocityメソッドは、メインアクティビティのonTouchから呼び出されます。光を当ててください。

よろしく/M

オーバーライドされたonTouchメソッド:

@Override
public boolean onTouch(View view, MotionEvent event)
{
    MySensorEventListener eventListener = new MySensorEventListener();

    switch(event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
            String[] strings = eventListener.getVelocity();

            String velocity_int = strings[0];
            String velocity_string = strings[1];


            velocityView.setText(velocity_int);
            listView.setText(velocity_string);


            break;
    }

    return false;
}
4

1 に答える 1

2

onTouch()が呼び出されるたびに、 の新しいインスタンスを作成し、MySensorEventListenerこの新しいインスタンスにその速度を尋ねます。各MySensorEventListenerインスタンスには生の値のリンクされた独自のリストがあるため、毎回空のリストを取得します。

リスナーはおそらく 1 回だけ作成し、外側のクラスのインスタンス フィールドに格納する必要があります。

于 2012-12-23T12:36:08.520 に答える