Java 从侦听器修改UI

Java 从侦听器修改UI,java,android,user-interface,Java,Android,User Interface,最近我正在开发一个应用程序,它可以显示来自URL的视频流。连接到指定的WiFi后,应打开WebView,并播放视频 问题是,我需要检查我们是否使用了正确的WiFi,然后切换到新的活动。监听器,检查它是否正在创建自己的线程,并且不能修改UI。我试过RunNuithRead,但它仍然没有改变UI,我只是排除了异常。有办法让它工作吗?我的代码: public class MainActivity extends AppCompatActivity { ... private Bool

最近我正在开发一个应用程序,它可以显示来自URL的视频流。连接到指定的WiFi后,应打开WebView,并播放视频

问题是,我需要检查我们是否使用了正确的WiFi,然后切换到新的活动。监听器,检查它是否正在创建自己的线程,并且不能修改UI。我试过RunNuithRead,但它仍然没有改变UI,我只是排除了异常。有办法让它工作吗?我的代码:

public class MainActivity extends AppCompatActivity {

    ...
    private Boolean mStatus = Boolean.FALSE;
    private ConnectionHandler mConnectionStatus;
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ...
        mConnectionStatus = new ConnectionHandler();
        ...


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

        mConnectionStatus.addConnectivityListener(new ConnectionHandler.ConnectivityListener() {
            @Override
            public void onChange() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        stopLoadingScreen();
                        openWebView();
                    }
                });
            }
        });

        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if(!mConnectionStatus.getStatus()){
                    stopLoadingScreen();
                    Toast.makeText(getApplicationContext(),
                            "Camera not found.\nMake sure that camera is turned on.",
                            Toast.LENGTH_LONG).show();
                }
            }
        }, 30000);
    }

    public void stopLoadingScreen() {
        connectButton.setAlpha(1.0f);
        mTextView.setAlpha(1.0f);
        mLoadingView.setVisibility(View.GONE);
    }

    ...

    private void openWebView() {
        Intent intent = new Intent(this, WebViewActivity.class);
        startActivity(intent);
    }

    class ConnectivityStatus implements Runnable{
        @Override
        public void run(){

            long startTime = System.currentTimeMillis();
            if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                mPermissions = Boolean.FALSE;
            }
            WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
            if (wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {
                while ((System.currentTimeMillis() - startTime) < 30000) {
                    if (wifiInfo.getSSID().equals(mSsid)) {
                        mConnectionStatus.setStatus(Boolean.TRUE);
                        break;
                    }
                }
            }
        }
    }

}
public类MainActivity扩展了AppCompatActivity{
...
私有布尔值mStatus=Boolean.FALSE;
私有连接处理器mConnectionStatus;
...
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
mcConnectionStatus=新的ConnectionHandler();
...
connectButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
惊人的加载屏幕();
连接摄像机(mWifiManager);
新线程(新连接状态()).start();
}
});
mConnectionStatus.AddConnectionyListener(新的ConnectionHandler.ConnectionyListener(){
@凌驾
更改后的公共无效(){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
停止加载屏幕();
openWebView();
}
});
}
});
最终处理程序=新处理程序();
handler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
如果(!mConnectionStatus.getStatus()){
停止加载屏幕();
Toast.makeText(getApplicationContext(),
“找不到摄像头。\n请确保摄像头已打开。”,
Toast.LENGTH_LONG).show();
}
}
}, 30000);
}
公共无效停止加载屏幕(){
connectButton.setAlpha(1.0f);
mTextView.setAlpha(1.0f);
mLoadingView.setVisibility(View.GONE);
}
...
私有void openWebView(){
Intent Intent=新的Intent(这是WebViewActivity.class);
星触觉(意向);
}
类ConnectivityStatus实现可运行{
@凌驾
公开募捐{
long startTime=System.currentTimeMillis();
if(ActivityCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予){
mPermissions=Boolean.FALSE;
}
WifiInfo WifiInfo=mWifiManager.getConnectionInfo();
如果(wifiInfo.getSupplicantState()==SupplicantState.COMPLETED){
而((System.currentTimeMillis()-startTime)<30000){
if(wifiInfo.getSSID()等于(mSsid)){
mConnectionStatus.setStatus(Boolean.TRUE);
打破
}
}
}
}
}
}
尝试使用来自的
post()
方法。例如:


newhandler().post(runnable)

我应该从onChange()运行它吗?@PatrykWoźniak yes