0

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

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 为真,我想自动关闭登录活动。

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

4

1 回答 1

3

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

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

于 2012-08-03T20:53:53.443 回答