Android 实现等待子线程执行完毕后再执行主线程的逻辑

今天遇到一个问题,大概是这样子的,有一个类叫RocketChat,里面有登录的逻辑,我需要我的类对象执行完它的登录方法后才继续执行后面的逻辑,我知道有handle的方式,但是想了一下,需要调整许多代码,就想了下面这种骚操作:

主要思路就是,在RocketChat里面设置一个变量,用来标识login方法执行的状态,

1未登录 0登录失败 1登录成功

RocketChat里面的login方法:

public int login (){
        FormBody loginBody = new FormBody.Builder()
                .add("user",user)
                .add("password",password)
                .build();
        HttpUtil.sendOkHttpPostRequest(serverUrl + loginApi, loginBody, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: 登录失败");
                loginStatus = 0;
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String resp = response.body().string();
                AuthData auth = Utility.handleLoginResp(resp);
                if (auth!=null){
                    loginStatus = 1;
                    authData = auth;
                    Log.d(TAG, "onResponse: 登录"+authData);
                }else{
                    loginStatus = 0;
                }
            }
        });
        return loginStatus;

使用loginStatus来标识登录状态

在调用方我只需要这样就可以了:

//记得一定要在子线程里面操作,不能在主线程里面操作
new Thread(new Runnable() {
                    @Override
                    public void run() {
                        rocketChat.login();
                        while (rocketChat.getLoginStatus()==-1){
                            continue;
                        }//因为-1标识未登录,所以这里就是不断地判断是否执行完登录操作
                      //执行到这里就说明已经执行完登录操作了,再判断loginStatus,若是1就是登录成功,0就是登录失败
                    }
                }).start();

 

 

你可能感兴趣的:(Android)