java - 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();
}
});
}
解决方案
我之前没有注意到,但是,是的,你的线程中遗漏了一些东西。您正在创建一个新线程,但您没有告诉它开始:
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
推荐阅读
- swift - Xcode UITest 用于不同的本地化字符串
- java - 如何使用 XmlPullParser 解析 XML?
- angular - 具有相同组件的多个实例的角度状态管理
- rest - 运行restbird docker容器时自动启动Mock Server
- c++ - 链表包含 c++ 中不同的派生类对象
- android - Flutter:键盘打开时无法使表单滚动
- java - 如何将 short[] 转换为 List
在带有流的Java中? - postgresql - Planner 不使用索引顺序使用 CTE 对记录进行排序
- python - 在 grok 上的 python 中防止进程的 SIGKILL
- c# - 将图像按钮放在背景图像上