繁体   English   中英

SharedPreferences 在应用程序强制关闭最近的活动时被清除

[英]SharedPreferences cleared on app force close from recent activities

我已经构建了一个应用程序,它具有两个功能,一个是通过移动 OTP 登录用户,另一个是登录后显示的 mainactivity。 成功登录后,我可以保存共享首选项并在其他活动中检索它。 但是,当我从主要活动中强制关闭/终止应用程序时,当我重新启动应用程序时,不再存储共享首选项的值。

我也检查过类似的 stackoverflow 解决方案,但没有解决这个问题

下面的代码是用于存储共享首选项的登录方法,

if (task.isSuccessful()) {
                        num = "+91" + InputPhoneNumber.getText().toString().trim();
                        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("VerifiedUsers").child(num);

                        rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot snapshot) {
                                if (snapshot.hasChild("Active")) {
                                    String activeStatus = snapshot.child("Active").getValue().toString().trim();
                                    loadingBar.dismiss();
                                    if (activeStatus.equalsIgnoreCase("false")) {
                                        Toast.makeText(LoginActivity.this, "Congratulations, you're logged in successfully...", Toast.LENGTH_SHORT).show();
                                        SendUserToMainActivity();
                                    }
                                }
                            }
                        });
                    }
                         

这里是sendtomain活动的定义

private void SendUserToMainActivity() {
    saveData();
    /*new AlertDialog.Builder(LoginActivity.this)
            .setTitle("EMPTY MOBILE NUMBER")
            .setMessage(num)

            // Specifying a listener allows you to take an action before dismissing the dialog.
            // The dialog is automatically dismissed when a dialog button is clicked.
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    InputPhoneNumber.setText("");
                }
            })
            .setIcon(android.R.drawable.ic_dialog_alert)
            .show();*/
    Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class);
    mainIntent.putExtra("MobileNumber",num);
    startActivity(mainIntent);
    finish();
}

下面 function 将数据保存到登录活动中的共享首选项中,

 public void saveData()
{
    /*SharedPreferences sharedPreferences=getSharedPreferences(SHARED_PREFS,MODE_PRIVATE);
    SharedPreferences.Editor editor=sharedPreferences.edit();

    editor.putString("MobileNumber",num);*/
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("MobileNumber", num);
    editor.commit();
}

现在,当我在强制关闭后启动主要活动时,它没有存储的值下面是 function 调用

private void loadData() {
   /* final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    num = mSharedPreference.getString("MobileNumber", "Fault");*/
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
    loggedInMobileNumber= preferences.getString("MobileNumber", null);
}

 @Override
protected void onResume() {
    super.onResume();
    loadData();
    new AlertDialog.Builder(MainActivity.this)
            .setTitle("MOBILE NUMBER")
            .setMessage(loggedInMobileNumber)

            // Specifying a listener allows you to take an action before dismissing the dialog.
            // The dialog is automatically dismissed when a dialog button is clicked.
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                }
            })
            .setIcon(android.R.drawable.ic_dialog_alert)
            .show();
}




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    loadData();
    Toast.makeText(MainActivity.this, loggedInMobileNumber, Toast.LENGTH_SHORT).show();}

要获取用户使用 firebase 登录的电话号码,您不必将电话号码保存在首选项或数据库中,您始终拥有当前用户的电话号码,您可以使用以下代码降低复杂性和代码

String phone =  FirebaseAuth.getInstance()
                            .getCurrentUser()
                            .getPhoneNumber()

我想您需要提供一个文件来保存这些值,如下所示

 public void saveData()
{
    SharedPreferences preferences = getSharedPreferences("prefs",MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("MobileNumber", num);
    editor.apply(); //try apply instead of commit()
}

** 加载 Sharedpreferences 值

private void loadData() {
   SharedPreferences preferences= 
    getSharedPreferences("prefs",MODE_PRIVATE);
    loggedInMobileNumber= preferences.getString("MobileNumber", null);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM