我想将常见的安全检查扩展到我的应用程序的几乎每个视图。要做到这一点,我已经完成了这个课程
public class ProtectedActivity extends ActivityBase {
boolean isAuthenticated = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread validationThread = new Thread()
{
@Override
public void run()
{
try
{
isAuthenticated = UserService.validateToken();
}
catch (FTNIServiceException e)
{
//eat it
}
finally
{
if (!isAuthenticated)
{
startActivity(new Intent(ProtectedActivity.this, SignInActivity.class));
finish();
}
}
}
};
validationThread.start();
}
}
逻辑很简单。根据我的restful api验证用户以确保他们已登录。如果不是,请将其显示在登录页面。
这非常有用,因为要添加安全检查,我需要做的就是继承我的ProtectedActivity
。
public class MainMenuActivity extends ProtectedActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
但问题是,我定期收到View not attached to window manager
个错误。我明白为什么会这样。我在父类中开始了一个新的意图,并且孩子继续存在。即使新的意图已经开始,也试图改变它的视图。处理此问题的更好方法是,如果用户未经过身份验证(例如他们的会话在服务器端到期),则在将用户发送到登录屏幕时不会出错?
答案 0 :(得分:1)
你不是Thread
。使用AsyncTask
代替哪些应正确处理对Windows的引用。
另外,我会将此更改为其他实现。为什么不使用手机上的“首选项”存储来存储某种令牌。如果令牌无效,则请求新令牌以及您当前正在执行的所有操作。这种方式更好,因为您不希望每次都请求REST调用。
我想象这样的事情(伪代码)