![](/img/trans.png)
[英]SharedPreferences causes app to force close when using Tabs in android
[英]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.