【发布时间】:2021-04-19 12:29:08
【问题描述】:
我想从 firebase 数据库制作倒数计时器。计数器应平等地同步到所有用户 并且用户不应控制或操纵计时器。
我尝试使用开始时间作为网络提供的日期,并在 firebase 数据库中设置最终完成时间。倒数计时器应该计算两个时间的差异。
这是我的代码。
清单
<uses-permission android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
主计数器片段
private CountDownTimer mCountDownTimer;
private TextView mTextViewCountDown;
private String dateEnd="";
private long mTimeLeftInMillis;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
dashboardFragment= inflater.inflate(R.layout.fragment_dashboard, container, false);
startTimer();
currentUser= FirebaseAuth.getInstance().getCurrentUser();
mAuth=FirebaseAuth.getInstance();
timeRef=FirebaseDatabase.getInstance().getReference();
InitializeFields();
mTimeLeftInMillis=dateFormat();
return dashboardFragment;
}
private long dateFormat() {
long diff=0;
SimpleDateFormat formatter=new SimpleDateFormat("dd.MM.yyyy, HH:mm");
formatter.setLenient(false);
long endTime=0;
Date endDate;
try {
endDate=formatter.parse(dateEnd);
endTime=endDate.getTime();
}catch ( ParseException e){
e.printStackTrace();
}
long startTime = System.currentTimeMillis();
diff=endTime-startTime;
return diff;
}
private void startTimer() {
mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
mTimeLeftInMillis = millisUntilFinished;
updateCountDownText();
}
@Override
public void onFinish() {
}
}.start();
}
private void updateCountDownText() {
int days=(int) mTimeLeftInMillis/(24*60*60*1000);
int hours=(int) mTimeLeftInMillis/(60*60*1000)%24;
int minutes = (int) mTimeLeftInMillis / (60*1000)%60;
int seconds = (int) mTimeLeftInMillis / 1000%60;
String timeLeftFormatted = String. format(Locale. getDefault(), "%02d:%02d:%02d:%02d",days,hours, minutes, seconds);
mTextViewCountDown. setText(timeLeftFormatted);
}
private void InitializeFields() {
mTextViewCountDown = dashboardFragment.findViewById(R.id.count_down_timer);
}
@Override
public void onStart() {
super.onStart();
final DatabaseReference timeRef=FirebaseDatabase.getInstance().getReference().child("Time").child("endTime");
String timeSettings = android.provider.Settings.System.getString(
getActivity().getContentResolver(),
android.provider.Settings.System.AUTO_TIME);
if (timeSettings.contentEquals("0")) {
android.provider.Settings.System.putString(
getActivity().getContentResolver(),
android.provider.Settings.System.AUTO_TIME, "1");
}
timeRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
dateEnd=(String) snapshot.getValue();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
updateCountDownText();
startTimer();
}
计数器得到差异但不计数。每次我重新启动应用程序时,它都会获得新的刷新时间,唯一的问题是不算数。
我不知道如何解决它。请任何人。
【问题讨论】:
标签: android firebase firebase-realtime-database countdowntimer