如何自动更新共享首选项变量



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

我很抱歉缩进。基本上,我将newTodayFloatValue初始化为0,因为我需要todayValueToBeAdd附加到newTodayFloatValue中。然后我把这个值保存到共享首选项中!但我希望这可以在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));

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

"android.intent.action.DATE_CHANGED"

每当日期自动更改(因为日期实际已更改)或由用户显式更改时,它都会触发。

若要在应用未运行时接收此广播,需要使用上述意向筛选器在清单中声明它。

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

然后在接收器中,您可以在共享首选项中进行更改

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();
    }
}

此类事件有Android"广播",例如时间更改(ACTION_TIME_CHANGED)或日期更改时(ACTION_DATE_CHANGED动作)。

请参阅相应的 javadoc 以获取进一步阅读。在这里,您可以找到有关如何使用广播的信息。

我认为有更简单的方法可以实现这种效果。我会在方法setFloatValue中编写一个方法getFloatValue(...)setFloatValue,您不仅应该在SharedPreferences中更新floatValue,而且还应该floatValueLastModification更新。

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

当然,由于您这样做,因此您应该仅通过这些方法访问此floatValue

我认为阅读和理解这样的代码会容易得多。

最新更新