2017-02-01 15 views
0

おそらく私は、sharedpreferences浮動小数点値floatValueを持っています。デバイスが新しい日を検出したら、floatValueを自動的に0に設定するにはどうすればよいですか?今日のように、今日は2/1/17であり、floatValueの値は1250.23です。これを0にリセットすることは可能ですか?私のtextViewは0を表示し、ユーザーは翌日の朝に目を覚ますと、テキストビューのテキストが0であることに気付きます。SharedPreferences変数を自動的に更新するには?

ごめんなさいくぼみ。基本的に、newTodayFloatValueに追加するtodayValueToBeAddedが必要なので、newTodayFloatValueを0に初期化します。次に、この値を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)); 
+0

サービスを利用していますか? – W4R10CK

+0

私はこのような状況のためにどのようなアプローチが必要なのか分からないので、技術的に固執しています! – coffeeboi619

+0

私はあなたの活動の中でチャージを入れてあなたを見せることができるコードを持っていますか? – W4R10CK

答えて

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> 

は、次にレシーバー内、私はこの効果を達成するための非常に簡単な方法があると思います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(); 
    } 
} 
+0

どういうわけか、これは私のためにはうまくいきません!私はあなたのコードとあなたのコードの背後にあるロジックを理解していますが、私のテキストビューは前日のフロート値を表示し続けます。今のアプローチは何でしょうか? – coffeeboi619

+0

あなたの現在のコードを投稿できますか? Manifest、Receiver、SharedPreferencesを読んだActivity/Fragment/Class? – Rachit

+0

ありがとう!あなたのコメントは本当にマニフェストを見直すようになりました。それは私のアプリケーションが動作しないようにするインテントフィルターコードの位置でした。今解決されました! – coffeeboi619

0

Androidの "放送は、" 時間のような(ACTION_TIME_CHANGED)変更または時に日付が変わる(ACTION_DATE_CHANGED ACTION)、このようなイベントのためにあります。

詳細は、対応するjavadocを参照してください。 hereには、ブロードキャストの操作方法が記載されています。

0

を作ることができます。方法setFloatValuegetFloatValue(...)setFloatValueというメソッドを書きますが、をSharedPreferencesに更新するだけでなく、floatValueLastModificationにも更新する必要があります。

getFloatValueの場合は、floatValueLastModificationと現在の時刻を比較し、前の日であれば0を返します。

もちろん、このようにすると、floatValueにアクセスする必要があります。

私はこのようなコードを読んで理解する方がずっと簡単だと思います。

関連する問題