Как только метод onDataChange
запускается снова, вы запускаете второй поток, который обновляет GraphView
. Это приводит к тому, что два потока одновременно записывают в одно и то же графическое представление, что приводит к ошибке.
Чтобы исправить это, следует сохранить ссылку на поток в действии:
MyThread graphUpdater;
Затем переместите создание потока из ValueEventListener
, например
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
// check if thread is already created
if (graphUpdater != null) {
// if already running, ignore button press
// you could stop your thread here to stop the graph plotting
// if you want
return;
}
reff= FirebaseDatabase.getInstance().getReference().child("ABC123");
reff.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
float Value=Float.parseFloat(dataSnapshot.child("Value").getValue().toString());
kuyruk.offer(Value);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
// create one thread
graphUpdater = new MyThread();
graphUpdater.start();
}
});