java - Android应用程序如何在不使用Refresh和ReCreate的情况下重新启动应用程序?

标签 java android

在我的应用程序中,我有一个登录和注册部分,当用户注册应用程序时,该部分会将其号码保存到数据库中,然后在主应用程序中将使用该手机从服务器获取用户信息。我的问题是,当我点击注销按钮时,应用程序会执行此操作,但问题仍然是购物车和其他需要登录的部分,仍在工作,当我重新启动应用程序时,它将完全注销用户并让用户唱歌-in 再次访问。我已经使用了重新创建并完成,但它不起作用。这是检查用户是否存在的代码,以及该应用程序的哪个基础来获取用户信息:

private void checkSessionLogin() {

    UserDbHelper userDbHelper = new UserDbHelper(getApplicationContext());
    SQLiteDatabase database = userDbHelper.getReadableDatabase();

    Cursor cursor = userDbHelper.readPhone(database);


    while (cursor.moveToNext())
    {
        PhoneNmber = cursor.getString(cursor.getColumnIndex(UserDatabaseUser.UserEntry.PHONE));

    }

    if ((AtlasPref.getInt("user_id",1) == 1)){


        swipeRefreshLayout.setRefreshing(true);
        //Check exists user on Serve (MySQL)
        mService.checkExistsUser(PhoneNmber)
            .enqueue(new Callback<CheckUserResponse>() {
                @Override
                public void onResponse(Call<CheckUserResponse> call, Response<CheckUserResponse> response) {
                    CheckUserResponse userResponse = response.body();
                    if (userResponse.isExists())
                    {
                        //Request information of current user
                        mService.getUserInformation(PhoneNmber)
                                .enqueue(new Callback<User>() {
                                    @Override
                                    public void onResponse(Call<User> call, Response<User> response) {
                                        Common.currentUser = response.body();
                                        if (Common.currentUser != null) {
                                            swipeRefreshLayout.setRefreshing(false);

                                            updateTokenToServer();

                                            //Set Info
                                            txt_name.setText(Common.currentUser.getName());
                                            txt_phone.setText(Common.currentUser.getPhone());
                                            hideItem();
                                            //Set Avatar
                                            if (!TextUtils.isEmpty(Common.currentUser.getAvatarUrl())) {
                                                Picasso.with(getBaseContext())
                                                        .load(new StringBuilder(Common.BASE_URL)
                                                                .append("user_avatar/")
                                                                .append(Common.currentUser.getAvatarUrl()).toString())
                                                        .into(img_avatar);
                                            }

                                        }
                                    }

                                    @Override
                                    public void onFailure(Call<User> call, Throwable t) {
                                        swipeRefreshLayout.setRefreshing(false);
                                        Log.d("ERROR",t.getMessage());

                                    }
                                });
                    }
                }

                @Override
                public void onFailure(Call<CheckUserResponse> call, Throwable t) {

                }
            });
}
else if ((AtlasPref.getInt("user_id",0) == 0))

    {
        showItem();

        txt_name.setText("Name");
        txt_phone.setText("Number");
    }
    else
    {

        showItem();

        txt_name.setText("Name");
        txt_phone.setText("Number");
    }

}

退出按钮:

builder.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                UserDbHelper userDbHelper = new UserDbHelper(getApplicationContext());
                SQLiteDatabase database = userDbHelper.getReadableDatabase();

                userDbHelper.deleteContact(PhoneNmber,database);
                userDbHelper.close();

                //Clear All Activity
                SharedPreferences.Editor editor=AtlasPref.edit();
                editor.putInt("user_id",0);

                editor.commit();
                // first- i've tried this without 2nd, 3rd
                Intent intent = getIntent();
                finish();
                startActivity(intent);
                // 2nd - I've tried this without 1st, 3rd
                recreate();
                // 3rd - I've tried this without 2nd, 3rd
                finish();

            }
        });

最佳答案

用户注销后,从头开始重新启动整个应用程序。

Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

这里你必须正确清除你的共享首选项

SharedPreferences.Editor editor = AtlasPref.edit();
editor.clear();
editor.commit();
finish();

关于java - Android应用程序如何在不使用Refresh和ReCreate的情况下重新启动应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52163834/

相关文章:

android - git 命令在 android studio 终端中无法识别

java - YourKit 是否报告 ReentrantLocks?

android - 向 Cloud Endpoints HTTP 请求添加 token

android - 双引号未正确关闭字符串文字

android - Android Studio-这是什么?

java - 如何将地理点经度+纬度转换为两倍?

java - ANDROID:权限请求代码未出现

java - 如何将 Byte 数组转换为 PrivateKey 或 PublicKey 类型?

java - ListView 内存使用

java - 为什么我在 Ga特林 中执行两个场景时得到 Value is Null?