2

我想检查用户是否登录。如果是,则显示主屏幕,否则显示登录屏幕。

现在我想到了两种方法。

1)将登录活动作为启动活动,检查 onCreate() 用户是否已登录,如果是,则显示主屏幕。

2)创建单独的活动来检查用户是否登录。

如果登录则显示主屏幕,否则显示登录屏幕。

但我很困惑我应该怎么做?
有没有标准的方法来做到这一点?
一个比另一个有什么优势吗?

任何帮助,将不胜感激。
提前致谢。

4

3 回答 3

2

使用额外的 Activity 进行切换,然后基本上什么都不做,然后切换并启动正确的下一个 Activity,是最简单的,但它会导致额外的过渡效果,这在视觉上不是最佳选择。

尽管对于大多数用户来说,这并不是很明显,所以如果你有时间压力,你可以这样做,然后在时间更灵活的时候更新它。这不是一个可怕的方法。

更好的选择是拥有 1 个主 Activity,它会检查情况并加载正确的 Fragment。如果您熟悉 Fragments,这甚至不会比额外活动选项花费更长的时间。

于 2013-06-28T09:40:21.390 回答
1

一种方法是使用片段,而不是在 onCreate() 之后,您只需提交所需的页面,但您的解决方案也没有任何问题。只需创建一个 StartupActivity,检查您需要的信息(显示一些启动屏幕或其他内容,因为我假设此检查在后台线程上运行)并根据结果启动相应的活动。

于 2013-06-28T09:39:33.350 回答
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. 
                 }
            }
    }

}
于 2013-06-28T10:32:23.223 回答