2016-11-28 4 views
0

Я пытаюсь сохранить количество шагов пользователя, но при перезагрузке или отключении мобильного телефона данные уходят. SharedPreferences не сохраняет данные. Он переходит в 0, когда я вхожу в приложение после перезагрузки моего мобильного телефона. Как его решить?sharedPreferences, не сохраняющий данные

код приведен ниже:

package com.threemusketeers.healthmaster; 

import android.app.Activity; 
import android.app.Application; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.preference.PreferenceManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class Pedometer extends Activity implements SensorEventListener { 
private TextView textView; 

private SensorManager mSensorManager; 

private Sensor mStepCounterSensor; 

private Sensor mStepDetectorSensor; 

SharedPreferences sharedPreferences; 

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

    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) { 
    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 

    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) { 
     editor.putInt("steps", value).commit(); 
     textView.setText("Step Counter Detected : " + sharedPreferences.getInt("steps", 0)); 
    } else if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) { 
     // For test only. Only allowed value is 1.0 i.e. for step taken 
     editor.putInt("steps", value).commit(); 
     textView.setText("Step Detector Detected : " + sharedPreferences.getInt("steps", 0)); 
    } 
} 

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

    } 

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

Вам также нужно позвонить 'editor.commit (); ' –

+0

Я назвал это уже .. editor.putInt («шаги», значение) .commit(); –

+0

ах, извините ... пропустил это. –

ответ

0

Вы делаете что-то странно, само по себе, а именно записать значение в SharedPreferences, а затем получить его оттуда снова, который является unnecesarry операции ввода-вывода.

Это также вызывает проблему, так как шаг счетчик считает

количество шагов, предпринятых пользователем с момента последней перезагрузки

(Из documentation)

Когда ты перезагрузите устройство, счетчик сбрасывается на 0. Вы не обновляете TextView в onCreate, а скорее, когда количество шагов изменяется (от 0 до 1), переписывайте предыдущее значение в SharedPreferences и обновить значение TextView оттуда.

Вам необходимо сменить логику сохранения, чтобы сначала прочитать значение из sharedprefs и добавить это как базовое значение, если текущий счетчик шагов меньше, чем сохраненное значение. Или просто считайте шаги с помощью детектора шагов самостоятельно.

+0

Thanx много ..... может у сказать, как сделать счетчик шагов подсчитывает мои шаги, хотя мое приложение не работает? Приложение учитывает шаги только при запуске приложения. –

0

Попробуйте использовать SharedPreferences как нижеуказанным:

Для сохранения данных:

SharedPreferences prefs = getSharedPreferences("my_prefs", MODE_PRIVATE); 
Editor editor = prefs.edit(); 
editor.putString("name", "Ravish"); 
editor.commit(); 

Для извлечения данных:

SharedPreferences prefs = getSharedPreferences("my_prefs", MODE_PRIVATE); 
String name= prefs.getString("name"); 
+0

спасибо ..... но когда я перезагружу свой мобильный телефон, вместо увеличения на 1 для каждого шага он увеличивается на большое значение –

Смежные вопросы