2016-11-28 121 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,它會增加一個很大的值 –