无法从静态处理程序调用finish()

时间:2012-08-03 20:46:45

标签: android

如果用户已登录该服务,我有一个主要活动。如果没有用户登录,则会打开一个新活动:

if (userName == null) {
    Intent myIntent = new Intent(MainActivity.this, Login.class);
    MainActivity.this.startActivity(myIntent);
}

此活动包含用户名和密码以及登录按钮的字段。用户填写信息然后点击登录。我在一个新线程中做网络:

new Thread( new Runnable() {
    public void run() {
    try {                   
            Auth myAuth = new Auth(getApplicationContext());
    Boolean isAuth = false;
    isAuth=myAuth.getAuthToken(tUserName.getText().toString(), tPassword.getText().toString());
            Bundle b = new Bundle();
    b.putBoolean("isAuth", isAuth);
    Message msg = new Message();
    msg.setData(b);
    loginHandler.dispatchMessage(msg);
        }
        catch (InterruptedException ex) { ex.printStackTrace(); }
        catch (Exception ex) { ex.printStackTrace();}
        finally { }         }
    }).start();

这会将消息发回给处理程序:

private static Handler loginHandler = new Handler () {
    @Override 
    public void handleMessage(Message msg) {
        mProgress.setVisibility(View.GONE);         

        if(msg.getData().getBoolean("isAuth")){
            // UNABLE TO CALL FINISH
        }
        else
        {
            CharSequence msg2 = "Login Failed";         
            Toast.makeText(context, msg2, Toast.LENGTH_SHORT).show();
        }
    }
};

如果isAuth为true,我想自动关闭登录活动。

我实施登录屏幕的计划可能走错了路。是这样只是让我知道,我会研究你建议的另一种方式。

1 个答案:

答案 0 :(得分:3)

finish()不是静态方法,它使其与其类的特定实例相关联 - 使其无法从静态方法(根据定义与类的实例无关)使用)。如果您可以在静态方法中获得对活动的引用,则可以调用finish(),而不是调用myActivity.finish()

也许更好的解决方案是简单地在登录活动上调用startActivityForResult(),如果不需要登录,则让该活动在没有用户交互的情况下返回。