У меня есть кнопка и 1 дочерний поток с именем «checker2». Я хочу изменить логическое значение на false, как только поток "checker2" что-то найдет. Я использовал runOnUiThread (это может быть неправильно), и он меняет значение boolean. Но после этого, когда я нажимаю любую кнопку, значение boolean меняется на true, а затем автоматически меняется на false (я не хочу эту часть). Я не понимаю своей проблемы. Я новичок.
if (((Button)v).getText().toString().equals("")) {
if(searching.iffirstplayer){ // IGNORE THIS LINE
if(ismovedone){
TextViewDatabaseChecking.setText(Boolean.toString(ismovedone));
Toast.makeText(this, "move already completed", Toast.LENGTH_SHORT).show();
}
else{
ismovedone=true; // CHANGING THE VALUE TO TRUE(IT WORKS) BUT THEN AUTOMATICALLY CHANGES TO FALSE
TextViewDatabaseChecking.setText(Boolean.toString(ismovedone));
((Button)v).setText("X");
((Button)v).setTextColor(Color.parseColor("#000000"));
((Button)v).setTextSize(50);
referencemove.child(Activity4.username).child("ismovedone").setValue("1");
referencemove.child(Activity4.username).child("ismovedoneagain").setValue("0");
referencemove.child(Activity4.username).child("player2").setValue("-1");
referencemove.child(Activity4.username).child("player1").setValue(FieldCreatorAndChangeDetector());
Thread thread=new Thread(checker2);
thread.setDaemon(true);
thread.start();
}
поток:
private volatile int moveint2;
public Runnable checker2=new Runnable() {
boolean checker2bool=false;
@Override
public void run() {
while(true)
{
referencemove.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(!snapshot.child(Activity4.username).child("player2").getValue().equals("-1")) {
moveint2=Integer.parseInt(snapshot.child(Activity4.username).child("player2").getValue().toString());
checker2bool=true;
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
// NOT IMPORTANT
}
});
//above
if(checker2bool)
{
runOnUiThread(new Runnable() {
public void run() {
ismovedone=false;
TextViewDatabaseChecking.setText(Boolean.toString(ismovedone));
}
});
PrinterFromDatabase(moveint2,"O");
break;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Есть ли проблемы с моей веткой?