Android: слушатель для логического изменения - PullRequest
0 голосов
/ 29 февраля 2020

Я знаю, что есть много примеров, но я все еще не могу заставить его работать.

Мне нужно отслеживать логическое значение, которое меняется на True, когда телефон подключен к правильному Wi-Fi. Wifi соединение и проверка производится во втором потоке. Может быть, есть проблема? Я перепробовал много решений, но не могу этого сделать.

Класс оболочки для переменной:

import java.util.ArrayList;
import java.util.List;



public class ConnectivityStatus {
    private Boolean status = Boolean.FALSE;
    private ConnectivityListener listener;

    public Boolean getStatus(){
        return status;
    }

    public void setStatus(Boolean status){
        this.status = status;
        if(status) {
            listener.onChange();
        }
    }

    public void addConnectivityListener(ConnectivityListener l) {
        this.listener = l;
    }

    interface ConnectivityListener{
        void onChange();
    }

}

MainActivity:

public class MainActivity extends AppCompatActivity {

    ...
    private ConnectivityStatus mConnectionStatus;
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...
        mConnectionStatus = new ConnectivityStatus();
        ...

        connectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startLoadingScreen();
                connectToCamera(mWifiManager);


                new Thread(new Runnable() {
                    public void run() {
                        long startTime = System.currentTimeMillis();
                        for(int i = 0; i<=6; i++) {
                            mConnectionStatus.setStatus(checkWifiSsid(mWifiManager, startTime));
                            if(mConnectionStatus.getStatus()) {
                                break;
                            }
                        }
                    }
                });
            }
        });

        mConnectionStatus.addConnectivityListener(new ConnectivityStatus.ConnectivityListener() {
            @Override
            public void onChange(){
                openWebView();
            }
        });


    }

1 Ответ

1 голос
/ 01 марта 2020

Раньше я не замечал, но, да, вы что-то упустили из своего потока. Вы создаете новую тему, но не говорите, чтобы она начиналась:

new Thread(new Runnable(){
    public void run(){
        // Optionally, you can also use log messages for debugging
        Log.d("MY_LOG_TAG", "Some message to look for in the log.");

        // ...
    }
}).start(); // Make sure to tell it to start
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...