首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android处理onStop和onDestroy用户行为

Android处理onStop和onDestroy用户行为
EN

Stack Overflow用户
提问于 2019-01-29 17:53:19
回答 1查看 63关注 0票数 0

我有一个登录用户流,用户登录Google+或Facebook。然后,在下一个活动中,他选择性别和一个昵称,如果这是他第一次在应用程序(共享偏好)。当用户按下“Go”按钮时,他会触发上传功能:

代码语言:javascript
复制
public void uploadUserData() {
        FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
        if (firebaseUser != null) {

            final String userUid = firebaseUser.getUid();
            final String username = editUsername.getText().toString().trim();
            final String user_class = String.valueOf(class_spinner.getSelectedItem());
            final String user_gender = String.valueOf(gender_spinner.getSelectedItem());
            FirebaseDatabase database = FirebaseDatabase.getInstance();
            DatabaseReference users = database.getReference("Users");
            users.child(userUid).child("userName").setValue(username); 

在此之后,用户不再看到这个活动,他的帐户有我需要的所有信息。

我的问题是如何防止用户退出应用程序(onDestroy)而不按enter按钮。如果他这么做了,我没有昵称,下次他打开应用程序时,他面对的活动需要用户名。(明显抛出空异常)。

流程:欢迎活动

代码语言:javascript
复制
if (!prefManager.isFirstTimeLaunch()) {
            launchHomeScreen();
            finish();
        }
private void launchHomeScreen() {
        startActivity(new Intent(WelcomeActivity.this, MainActivity.class));
        finish();
    }

主要活动:

代码语言:javascript
复制
@Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                if (firebaseAuth.getCurrentUser() != null) {
                    FirebaseUserMetadata metadata = mAuth.getCurrentUser().getMetadata();
                    if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp()) {
                        // The user is new, show them a fancy intro screen!
                        startActivity(new Intent(MainActivity.this, NewUserActivity.class));

                    } else {

                        if (prefManager.isFirstTimeLaunch()) {
                            // This is an existing user, show them a welcome back screen.
                            startActivity(new Intent(MainActivity.this, NewUserActivity.class));
                        }
                        else{
                            startActivity(new Intent(MainActivity.this, UserProfile.class));
                        }
                    }

                }

            }
        };

在NewUserActivity中:

代码语言:javascript
复制
btnEnterDungeons.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!TextUtils.isEmpty(editUsername.getText().toString().trim())) {
                    uploadUserData();
                    Intent intent = new Intent();
                    intent.setClass(NewUserActivity.this, GameChooseActivity.class);
                    prefManager.setFirstTimeLaunch(false);
                    finishAffinity();
                    startActivity(intent);
                }

因此,如果用户在没有按下btnEnterDungeons的情况下销毁btnEnterDungeons,则prefManager仍然存在。但是当循环再次开始时,use已经登录到Google+或Facebook.转到NewUserActivity并为UserProfile抛出异常。

结束错误发生在UserProfile的第164行。这意味着它显示了NewUserActivity,但也加载了UserProfile。

代码语言:javascript
复制
//Method to get data from Firebase user and show them in profile
    private void getData() {
        final Context mContext = UserProfile.this;
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        String userid = user.getUid();
        final long joinedDate = user.getMetadata().getCreationTimestamp();
        final SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");
        final Date resultdate = new Date(joinedDate);
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");
        reference.child(userid).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                User user = dataSnapshot.getValue(User.class);
                userName.setText(user.getUserName());
                userClass.setText(user.getUser_class());
                imageURL = user.getAvatar();
                Picasso.with(mContext).load(imageURL).into(userAvatar);
                dateofJoin.setText((sdf.format(resultdate)));
                PvPWins.setText(String.valueOf(user.getPvP_Wins()));
                PvPScore.setText(String.valueOf(user.getPvP_scores()));
                userScore.setText(String.valueOf(totalScore));
                userGender.setText(user.getUser_gender());


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-29 18:23:15

您可以使用Shared Preferences检查用户是否完成了“注册”任务。

因此,通常情况下,流程如下:

  1. 在启动程序活动中,可能是"SplashScreen“或"Login”活动,检查Shared Preferences并查看processCompleted的值是否为真,默认情况下值为false。
  2. 如果值为true,则意味着用户已经完成了该过程,因此您可以直接启动"Home“意图
  3. 如果值为false,则意味着用户没有完成该过程,因此您将显示“登录”意图。
  4. 当用户单击"GO“时,意味着他完成了这个过程,因此您可以使用true更新processCompletedShared Preference中的值。
  5. 下次用户打开应用程序时,processCompleted将是真实的,您将确信他确实提供了您需要的所有信息。

希望能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54426922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档