首页 > 解决方案 > Android:布尔变化的监听器

问题描述

我知道有很多例子,但我仍然无法让它发挥作用。

当手机连接到正确的 wifi 时,我需要监视布尔值,该值变为 True。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();
    }

}

主要活动:

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();
            }
        });


    }

标签: javaandroidlistener

解决方案


我之前没有注意到,但是,是的,你的线程中遗漏了一些东西。您正在创建一个新线程,但您没有告诉它开始:

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

推荐阅读