Java 每次按下按钮,数据都会加倍
我在屏幕上以小时、分钟、秒打印毫秒。但是,当我按下按钮时,每次单击都会将接收到的数据加倍。 例如 当5分10秒的数据输入时,当我再次单击按钮时,数据显示为10分20秒。每次单击按钮时,数据将乘以2。 我怎样才能解决这个问题Java 每次按下按钮,数据都会加倍,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我在屏幕上以小时、分钟、秒打印毫秒。但是,当我按下按钮时,每次单击都会将接收到的数据加倍。 例如 当5分10秒的数据输入时,当我再次单击按钮时,数据显示为10分20秒。每次单击按钮时,数据将乘以2。 我怎样才能解决这个问题 butondata.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SimpleDateFormat sdf = n
butondata.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String currentDateandTime = sdf.format(new Date());
startData = FirebaseDatabase.getInstance().getReference()
.child("totals")
.child(moTracks);
PeriodHow = startData.orderByChild("availableDate").equalTo(String.valueOf(currentDateandTime));
PeriodHow.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
if (data.child("availableDate").exists()) {
long seconds = (data.getValue(SecondsPeriod.class).getDuration().getSeconds());
long minute = (data.getValue(SecondsPeriod.class).getDuration().getMinutes());
long hours = (data.getValue(SecondsPeriod.class).getDuration().getHours());
vanminit = vanminit + minute;
vanhours = vanhours + hours;
aggregator = aggregator + seconds;
long fminute = vanminit*60*1000;
long fhours = vanhours*60*60*1000;
long fseconds = aggregator*1000;
long asd = fhours + fminute + fseconds;
if (asd < 0) {
throw new IllegalArgumentException("Duration must be greater than zero!");
}
long hrs = TimeUnit.MILLISECONDS.toHours(asd);
asd -= TimeUnit.HOURS.toMillis(hrs);
long mint = TimeUnit.MILLISECONDS.toMinutes(asd);
asd -= TimeUnit.MINUTES.toMillis(mint);
long scnd = TimeUnit.MILLISECONDS.toSeconds(asd);
StringBuilder sb = new StringBuilder(64);
sb.append(hours);
sb.append(" Hours ");
sb.append(mint);
sb.append(" Minutes ");
sb.append(scnd);
sb.append(" Seconds");
timedetails.setText(sb.toString());
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
butondata.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
SimpleDataFormat sdf=新SimpleDataFormat(“yyyy-MM-dd”);
字符串currentDateandTime=sdf.format(new Date());
startData=FirebaseDatabase.getInstance().getReference()
.儿童(“总数”)
.儿童(莫特拉克);
PeriodHow=startData.orderByChild(“availableDate”).equalTo(String.valueOf(currentDateandTime));
PeriodHow.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot数据:DataSnapshot.getChildren()){
如果(data.child(“availableDate”).exists()){
长秒=(data.getValue(SecondsPeriod.class.getDuration().getSeconds());
长分钟=(data.getValue(SecondsPeriod.class.getDuration().getMinutes());
长时间=(data.getValue(SecondsPeriod.class.getDuration().getHours());
vanminit=vanminit+分钟;
vanhours=vanhours+小时;
聚合器=聚合器+秒;
长Fmin=vanminit*60*1000;
长时间=小时*60*60*1000;
长fseconds=聚合器*1000;
长asd=小时+分钟+秒;
如果(asd<0){
抛出新的IllegalArgumentException(“持续时间必须大于零!”);
}
长小时=时间单位毫秒到小时(asd);
asd-=时间单位。小时。托米(小时);
long mint=时间单位毫秒到分钟(asd);
asd-=时间单位。分钟。托米利斯(薄荷);
long scnd=时间单位毫秒到秒(asd);
StringBuilder sb=新的StringBuilder(64);
某人(小时);
某人追加(“小时”);
某人(造币厂);
某人附加(“会议记录”);
某人追加(scnd);
某人附加(“秒”);
timedetails.setText(sb.toString());
}
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
});
迁移这些变量
vanminit = vanminit + minute;
vanhours = vanhours + hours;
aggregator = aggregator + seconds;
long vanminit = vanminit + minute;
long vanhours = vanhours + hours;
long aggregator = aggregator + seconds;
vanminitGlobal = vanminit;
vanhoursGlobal = vanhours;
aggregatorGlobal = aggregator;
通过在每个前添加long
,将其添加到本地
long vanminit = vanminit + minute;
long vanhours = vanhours + hours;
long aggregator = aggregator + seconds;
不要让它们类可用(声明在moethods上面的文件顶部),因为它们在每次调用onDataChange
时都会累积
顺便说一句,asd
或fseconds
不是最好的变量名
编辑:如果您想在类中存储这些值以供其他方法使用,则只需将它们复制到类可用变量中即可
vanminit = vanminit + minute;
vanhours = vanhours + hours;
aggregator = aggregator + seconds;
long vanminit = vanminit + minute;
long vanhours = vanhours + hours;
long aggregator = aggregator + seconds;
vanminitGlobal = vanminit;
vanhoursGlobal = vanhours;
aggregatorGlobal = aggregator;
在其他方法中,使用
Global
variables每次单击按钮时,您都需要重新初始化变量。我该怎么做?@MustapTR“我该怎么做?”我们不知道。信息不完整。请提供更多关于vanminit&vanhours的信息,以及您试图实现的目标。如何在方法之外使用它们?查看我的编辑
vanminit = vanminit + minute;
vanhours = vanhours + hours;
aggregator = aggregator + seconds;
long vanminit = vanminit + minute;
long vanhours = vanhours + hours;
long aggregator = aggregator + seconds;
vanminitGlobal = vanminit;
vanhoursGlobal = vanhours;
aggregatorGlobal = aggregator;