Java 每次按下按钮,数据都会加倍

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

我在屏幕上以小时、分钟、秒打印毫秒。但是,当我按下按钮时,每次单击都会将接收到的数据加倍。 例如 当5分10秒的数据输入时,当我再次单击按钮时,数据显示为10分20秒。每次单击按钮时,数据将乘以2。 我怎样才能解决这个问题

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;