如何自动更新SharedPreferences变量?

时间:2017-02-01 08:53:46

标签: java android

据说我有一个名为floatValue的sharedpreferences浮点值。当设备检测到新的一天时,如何将floatValue自动设置为0?例如今天是2/1/17,并且floatValue的值是1250.23。是否可以将其重置为0并且我的textView将显示0,这样当用户在第二天早上醒来时,他会注意到textview的文本为0。

我很抱歉这些缩进。基本上,我将newTodayFloatValue初始化为0,因为我今天需要将ValueToBeAdded附加到newTodayFloatValue。然后我将此值保存到SharedPreferences中!但是我希望在date_changed之后可以重置它。

 float newTodayFloatValue = 0;
 tvTodayFloatValue = (TextView)findViewById(R.id.todayfloatValueTextView);
    Intent intent1 = getIntent();
    float todayValueToBeAdded = intent1.getFloatExtra("strValueToBeAdded", 0.0f);
    final SharedPreferences totalTodayfloatValue = getSharedPreferences("totalTodayfloatValue", 0);
    newTodayFloatValue = totalTodayfloatValue.getFloat("totalTodayfloatValue", 0);
    newTodayFloatValue = newTodayFloatValue + todayValueToBeAdded;

    SharedPreferences.Editor editor = totalTodayfloatValue.edit();
    editor.putFloat("totalTodayfloatValue", newTodayFloatValue);
    editor.commit();
    tvTodayFloatValue.setText(String.valueOf(newTodayFloatValue));

3 个答案:

答案 0 :(得分:2)

您可以使用带有操作的广播接收器

  

" android.intent.action.DATE_CHANGED"

只要日期自动更改(因为日期实际已更改)或用户明确更改日期,它就会触发。

即使您的应用程序未运行,也要接收此广播,您需要使用上述的Intent-Filter在清单中声明它。

    <receiver
        android:name=".DateChangeReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="android.intent.action.DATE_CHANGED" />
        </intent-filter>
    </receiver>

然后在Receiver中,您可以在SharedPreferences

中进行更改
public class DateChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        SharedPreferences preferences = context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putInt("YOUR_INT", 0);
        editor.apply();
    }
}

答案 1 :(得分:0)

有Android&#34;广播&#34;对于此类事件,如时间更改(ACTION_TIME_CHANGED)或日期更改(ACTION_DATE_CHANGED) 行动)。

请参阅相应的javadoc以进一步阅读。 here您可以找到有关如何使用广播的信息。

答案 2 :(得分:0)

我认为有更简单的方法来实现这种效果。我会在方法getFloatValue(...)中编写方法setFloatValuesetFloatValue,您不仅应更新floatValue中的SharedPreferences,还应更新floatValueLastModification

然后在getFloatValue中,您应该将floatValueLastModification与当前时间进行比较,如果是前一天则返回0。

当然,既然你这样做,你应该只通过这些方法访问这个floatValue

我认为阅读和理解这些代码要容易得多。