2012-08-03 77 views
0

我有shecks如果用户已登录到该服务的主要活动。如果没有用户登录,它会打开一个新的活动:无法调用finish()从静态处理

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是真实的。

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

+0

不知道这是否是正确的方式来做到这一点,但在这里。我修改了线程中运行的代码以调用finish()。它似乎工作正常。 – techiegoob 2012-08-07 20:35:48

+0

isAuth = myAuth.getAuthToken(tUserName.getText()。toString(),tPassword.getText()。toString()); \t \t \t \t \t如果(isAuth){ \t \t \t \t \t \t光洁度(); \t \t \t \t \t} \t \t \t \t \t否则{ \t \t \t \t \t \t捆B =新软件包(); \t \t \t \t \t \t b.putBoolean(“isAuth”,isAuth); \t \t \t \t \t \t消息msg = new Message(); \t \t \t \t \t \t msg.setData(b); \t \t \t \t \t \t loginHandler.dispatchMessage(msg); \t \t \t \t \t} – techiegoob 2012-08-07 20:37:04

回答

3

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

也许不过,更好的解决方案是简单地调用startActivityForResult()的登录活动,让没有用户交互该活动的回报,如果没有登录是必要的。