2016-11-28 90 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(“steps”,value).commit(); –

+0

啊,对不起......错过了。 –

回答

0

你做一些事情,这本身就是奇数,即值写入SharedPreferences,然后从那里得到它这是一个unnecesarry IO操作。

这也导致你的问题,因为步骤计数器计数

一些

当你自上次重新启动

(从documentation)用户采取措施重新启动设备,计数将重置为0.您不更新onCreate中的TextView,而是在步骤计数更改(从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,它会增加一个很大的值 –