如果用户已登录该服务,我有一个主要活动。如果没有用户登录,则会打开一个新活动:
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,我想自动关闭登录活动。
我实施登录屏幕的计划可能走错了路。是这样只是让我知道,我会研究你建议的另一种方式。
答案 0 :(得分:3)
finish()
不是静态方法,它使其与其类的特定实例相关联 - 使其无法从静态方法(根据定义与类的实例无关)使用)。如果您可以在静态方法中获得对活动的引用,则可以调用finish()
,而不是调用myActivity.finish()
。
也许更好的解决方案是简单地在登录活动上调用startActivityForResult(),如果不需要登录,则让该活动在没有用户交互的情况下返回。