Ошибка абстрактного класса Android для метода

Итак, я следовал простому руководству построчно, но получаю сообщение об ошибке: Счетчик шагов класса должен быть либо объявлен абстрактным, либо реализовать абстрактный метод onAccuracyChanged(sensor, int) в прослушивателе sensorevent.

Изменить: // я изменил общедоступный класс на общедоступный абстрактный класс, но попытался добавить его в манифест, но не был принят, поскольку это не был конкретный класс, поэтому он не открывался нажатием кнопки на действие, приложение разбился.

Вот код:

public class StepCounter extends Activity implements SensorEventListener {

    private TextView textView;
    private SensorManager mSensorManager;
    private Sensor mStepCounterSensor;
    private Sensor mStepDetectorSensor;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.stepcounter);
        textView = (TextView) findViewById(R.id.textView47);

        mSensorManager = (SensorManager)
                getSystemService(Context.SENSOR_SERVICE);
        mStepCounterSensor = mSensorManager
                .getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
        mStepDetectorSensor = mSensorManager
                .getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
    }

    public void onSensorChanged(SensorEvent event) {
        Sensor sensor = event.sensor;
        float[] values = event.values;
        int value = -1;

        if (values.length > 0) {
            value = (int) values[0];
        }

        if (sensor.getType() == Sensor.TYPE_STEP_COUNTER) {
            textView.setText("Step Counter Detected : " + value);
        } else if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
            // For test only. Only allowed value is 1.0 i.e. for step taken
            textView.setText("Step Detector Detected : " + value);
        }
    }

    protected void onResume() {

        super.onResume();

        mSensorManager.registerListener(this, mStepCounterSensor,

                SensorManager.SENSOR_DELAY_FASTEST);
        mSensorManager.registerListener(this, mStepDetectorSensor,

                SensorManager.SENSOR_DELAY_FASTEST);

    }

    protected void onStop() {
        super.onStop();
        mSensorManager.unregisterListener(this, mStepCounterSensor);
        mSensorManager.unregisterListener(this, mStepDetectorSensor);
    }

}

person Bimal    schedule 10.02.2015    source источник


Ответы (3)


Вы внедряете SensorEventListener, поэтому вам нужно предоставить реализацию для onAccuracyChanged(sensor, int):

 @Override
 public void onAccuracyChanged(Sensor sensor, int accuracy){}

Если вы сделаете свой класс абстрактным, вы не сможете создать его экземпляр.

Проверять:

http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

http://docs.oracle.com/javase/tutorial/java/concepts/interface.html

person vinitius    schedule 10.02.2015

При реализации SensorEventListener необходимо реализовать методы, с которыми он поставляется, поскольку это Интерфейс. Добавьте метод onAccuraryChanged (датчик датчика, точность int), чтобы решить проблему.

person IntegralOfTan    schedule 10.02.2015
comment
Что мне вставить в onAccuraryChanged() - person Bimal; 11.02.2015
comment
Все, что вы хотите, чтобы программа делала при изменении точности датчика. Если вы не хотите ничего делать, вы можете оставить это поле пустым, но вам все равно нужно наследовать метод (запишите его). - person IntegralOfTan; 11.02.2015

Вы не можете создать экземпляр абстрактного класса, поэтому его нельзя создать из манифеста.

Сделайте другое, что предложил вам компилятор: реализуйте метод onAccuracyChanged.

person StenSoft    schedule 10.02.2015
comment
Что мне вставить в onAccuraryChanged() - person Bimal; 11.02.2015
comment
Я добавил protected void onAccuracyChanged(){ super.onAccuracyChanged(); } но говорит, что не может разрешить метод - person Bimal; 11.02.2015
comment
Вы можете оставить его пустым. Метод из интерфейса, поэтому super не вызывается. - person StenSoft; 11.02.2015
comment
Добавьте @Override к методу - person vinitius; 11.02.2015
comment
Вам также необходимо снова удалить abstract из класса. - person StenSoft; 11.02.2015
comment
я удалил абстрактное добавленное переопределение, и переопределение дает мне ошибку. - person Bimal; 11.02.2015
comment
Вам нужно реализовать это правильно, все это будет public abstract void onAccuracyChanged (датчик датчика, точность int) - person IntegralOfTan; 11.02.2015
comment
Прочтите ошибку. onAccurancyChanged нужны параметры. Я уверен, что ошибка подсказывает, какие параметры должны быть. - person StenSoft; 11.02.2015
comment
Да, извините, пропустил -___- - person Bimal; 11.02.2015