簡體   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