2016-10-12 14 views
1

値:私の第二の活動で問題は、私は、このような問題を抱えている

public static Calendar today = Calendar.getInstance(); 

私はいくつかのアラームを設定する必要があるので、私は次のやった:

私が主な活動でCalendarオブジェクトを持っています

for(int i = 0; i < alarmCounter; i++){ 
Calendar calendar = MainActivity.today; 

calendar.set(Calendar.HOUR_OF_DAY, alarmHours.get(i)); 
calendar.set(Calendar.MINUTE, alarmMinutes.get(i)); 
calendar.set(Calendar.SECOND, 0); 

      if (calendar.getTimeInMillis() <= System.currentTimeMillis()) { 
       calendar.add(Calendar.DAY_OF_YEAR, 7); 
      } 
} 

しかし、条件が満たされ、calendarに7日が追加された場合、これらの7日間もMainActivity.todayに追加されます。それはなぜ起こるのですか?どうすれば解決できますか?

MainActivity.todayの値を保存することは重要です。なぜなら、私は別の方法で値を変更して、常に現在の日付と同じではないからです。

答えて

1

これはメモリポインタの問題です。

calendarMainActivity.todayの両方が同じであることを示しています。

Calendar calendar = (Calendar)MainActivity.today.clone(); 
0

これは参照の仕組みです。基本的には、MainActivityのCalendarインスタンスで作業しています。 そうしたくないからです。このように使用する

Calendar calendar = Calendar.getInstance(); 
calendar.setTime(MainActivity.today.getTime(); 
1

あなたは間違ってあなたのレファレンスで作業:

あなたがそれらを維持したい場合は、あなたがclone()メソッドを使用することができる分離しました。必要なのは、新しいオブジェクトをクローン化してMainActivity.todayの状態を変更しないようにすることです。

import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class MainActivity { 
    private Calendar calendar; 

    public MainActivity() { 
     this.calendar = new GregorianCalendar(); 
    } 

    public Calendar getToday() { 
     return calendar; 
    } 
} 



public class Main { 
    public static void main(String[] args) { 
     Calendar calendar = (Calendar) new MainActivity().getToday().clone(); 

     calendar.set(Calendar.HOUR_OF_DAY, 2); //set some dummy values 
     calendar.set(Calendar.MINUTE, 2); 
     calendar.set(Calendar.SECOND, 0); 

     if (calendar.getTimeInMillis() <= System.currentTimeMillis()) { 
      calendar.add(Calendar.DAY_OF_YEAR, 7); 
     } 
    } 
} 

免責事項:ここでは、それがどのように見えるべきかで、これは最高のコードスタイルではありませんが、それが直面している問題のトピックスターターを解決するのに役立ちます。

関連する問題