我想检查用户是否已登录。如果是,则显示主屏幕,否则显示登录屏幕。
现在我想到了两种方法。
1)将登录活动作为启动活动,检查onCreate()用户是否登录,如果是,则显示主屏幕。
2)创建单独的活动以检查用户是否已登录。
如果已登录,则显示主屏幕,否则显示登录屏幕。
但我很困惑我应该采取哪种方式呢?
有没有标准的方法来做到这一点?
一个优于另一个有什么优势吗?
任何帮助将不胜感激 在此先感谢。
答案 0 :(得分:2)
使用额外的Activity来进行切换,并且基本上什么都不做,然后切换并启动正确的下一个Activity,是最简单的,但它会导致额外的过渡效果,这不是视觉上的最佳选择。
对于大多数用户来说,这并不是很明显,所以如果你受到时间压力,你可以这样做,并在以后更灵活的时候更新它。这不是一种可怕的方式。
一个更好的选择,就是有一个主要的Activity,它会检查情况并加载正确的Fragment。如果您熟悉Fragments,那么甚至不会比extra-Activity选项花费更长的时间。
答案 1 :(得分:1)
实现此目的的一种方法是使用片段,而不是在onCreate()之后,您只需提交所需的页面,但您的解决方案也没有任何问题。只需创建一个StartupActivity,检查您需要的信息(显示一些启动画面或其他内容,因为我假设此检查在后台线程上运行)并根据结果启动相应的活动。
答案 2 :(得分:1)
我认为你的问题没有一个明确的答案,所以我只想说明你喜欢做什么。我会避免进行额外的活动,并且会考虑你的第一个建议。在登录活动中,只是为了在视觉上正确,我会创建一个AsyncTask
来检查用户是否已登录。这个AsyncTask
应该有一个不可取消的ProgressDialog
消息,如
检查登录信息......
这个AsyncTask
应该在onCreate
方法中最后调用。
这样的事情:
public class LoginScreen extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loginscreen);
//It may be a good idead to make the Views handling the login process invisible
//Do whatever initialization work for the on create method here.
.
.
.
new CheckLoginAsyncTask().execute(); //This ideally should be called last. But it depends on the situation.
}
.
.
.
private class GetVisitReasonsAsyncTask extends AsyncTask<Void, Void, Boolean> {
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() { //Do the progress dialog initialization here...
progressDialog = ProgressDialog
.show(myActivityContext,
getString(R.string.ProgressDialogTitle),
getString(R.string.ProgressDialogMessage));
}
@Override
protected JSONArray doInBackground(Void... arg0) {
return checkLogin(); //Check login is boolean method returning true if the user is logged in, false otherwise.
}
@Override
protected void onPostExecute(Boolean isLoggedIn) {
dialog.dismiss(); //dismiss the dialog
if(isLoggedIn) {
//User is logged in, finish this activity and go to main menu
} else {
//User is not logged in, stay in this actity and make visible the the Views handling the login process if you had previously make them invisible.
}
}
}
}