Как изменить логическое значение в потоке пользовательского интерфейса из другого потока? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть кнопка и 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();
            }
        }
    }
};

Есть ли проблемы с моей веткой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...