2017-07-29 106 views
0

我正在爲夏令營創建一個考勤跟蹤器,在這裏輔導員可以通過鍵入editText並按下保存按鈕來輸入他們的露營者登錄的時間。 這個基本的字符串應該被保存到一個文本框中,並且每次應用程序被加載時加載到屏幕上。有多個這樣的盒子,所以輔導員可以跟蹤每個學生每天進/出的次數。屏幕上顯示的共享首選項

我已經使用sharedPreferences在按下按鈕時保存顧問的輸入,然後使用另一個按鈕顯示它。但是,當我關閉並重新打開APP時,無法將文字放到屏幕上。我的代碼丟失了什麼?

public class AttendancePage extends AppCompatActivity { 

EditText mondayMorn; 
TextView displayMonMorn; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_attendance_page); 
    String counsellorName = getIntent().getStringExtra("Senior Counsellor Name"); 

    TextView tv = (TextView)findViewById(R.id.counsellorName); 
    tv.setText(counsellorName + "'s"); 

    mondayMorn = (EditText) findViewById(R.id.editText37); 
    displayMonMorn = (TextView) findViewById(R.id.displayMonMorn); 
} 

public void saveInput (View view) { 
    SharedPreferences checkInMon = getSharedPreferences("LoginTime", Context.MODE_PRIVATE); 

    SharedPreferences.Editor editor = checkInMon.edit(); 
    editor.putString("mondayIn", mondayMorn.getText().toString()); 
    editor.apply(); 

    Toast.makeText(this, "Saved", Toast.LENGTH_LONG).show(); 
} 

public void updateSettings (View view){ 
    SharedPreferences checkInMon = getSharedPreferences("LoginTime", Context.MODE_PRIVATE); 

    String time = checkInMon.getString("mondayIn", ""); 

    displayMonMorn.setText(time); 
} 
+0

嘗試使用commit()方法保存共享首選項文件。 – Popeye

+0

你在哪裏調用'saveInput(...)'?由於您顯然沒有使用數據綁定庫,並且無法在您的代碼中找到它,您確定點擊偵聽器是否已正確設置? –

+0

你說得對,我沒有妥善設置它。再次像我說的,我的信息不會保存到sharedPreferences中,但在應用程序關閉後不會保持顯示狀態。 – user8384402

回答

0

替換:

SharedPreferences.Editor editor = checkInMon.edit(); 
editor.putString("mondayIn", mondayMorn.getText().toString()); 
editor.apply(); 

有:

SharedPreferences.Editor editor = checkInMon.edit(); 
editor.putString("mondayIn", mondayMorn.getText().toString()); 
editor.commit(); 

應的數據至少保存在首選項。

+1

除了async和sync之外,'apply()'和'commit()'之間沒有真正的區別,在這種情況下,這並不重要,因爲在數據寫入永久存儲。 –

+0

真實...好點 – TooManyEduardos