2012-10-10 89 views
2

我試圖將用戶條目存儲到EditText字段中,但是當我退出應用程序時,它不會出現。Android:SharedPreferences。如何正確實施它們

因此,例如,在他/她的名字,用戶類型,然後退出應用程序。當用戶返回並啓動應用程序時,用戶名稱出現在EditText字段中。不過,我無法得到這個工作。我相信它與sharedPreferences有關,但我不確定我要出錯的地方。

我很新的Android和Java的,所以尋找這相當困難。任何幫助將非常感激。

public class MainActivity extends Activity { 
    public final static String EXTRA_FROM = "com.example.assignment1.FROM"; 


    @Override 
     protected void onSaveInstanceState(Bundle outState) 
     { 
      super.onSaveInstanceState(outState); 
      EditText emailFrom =(EditText) findViewById(R.id.editEmailFrom); 
      String from = emailFrom.getText().toString(); 
      outState.putString(EXTRA_FROM, from); 
     } 

     @Override 
     protected void onRestoreInstanceState(Bundle savedState) 
     { 

      EditText emailFrom =(EditText) findViewById(R.id.editEmailFrom); 
      String from = savedState.getString(EXTRA_FROM); 
      emailFrom.setText(from); 

     } 

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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    public void emailSend (View sendButton) 
    { 
     Intent intent = new Intent(this,DisplayEmailActivity.class); 

     EditText emailFrom =(EditText) findViewById(R.id.editEmailFrom); 
     String from = emailFrom.getText().toString(); 
     intent.putExtra(EXTRA_FROM,from); 

     SharedPreferences saveFrom = getSharedPreferences(EXTRA_FROM, MODE_PRIVATE); 
     Editor editor = saveFrom.edit(); 
     editor.putString(EXTRA_FROM, from); 
     editor.commit(); 

     String storedfrom = saveFrom.getString(EXTRA_FROM, from); 
     emailFrom.setText(storedfrom); 

     startActivity(intent); 
    } 

次活動

public class DisplayEmailActivity extends Activity { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_display_email); 

      Intent intent = getIntent(); 

      String from = intent.getStringExtra(MainActivity.EXTRA_FROM); 
      TextView textFrom =(TextView)findViewById(R.id.displayEmailFrom); 
      textFrom.setText(from); 

     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      getMenuInflater().inflate(R.menu.activity_display_email, menu); 
      return true; 
     } 
+0

你想實現究竟是什麼? SharedPreferences用於存儲一些數據,以便下次啓動應用程序時可以訪問。 –

+0

谷歌搜索它...你最好在網上找到一些示例代碼,而不是在這裏問一個令人難以置信的普遍問題。 –

+0

我的目標是當用戶退出應用程序時,進入表單的條目仍然可以在EditText字段中看到。因此,例如在「FROM」格式中,當用戶再次啓動應用程序時,用戶名「TOM」將被存儲在EditText字段中。 – Calgar99

回答

3

好了,你在你的EditText emailFrom存儲值之後,你必須把它保存在SharedPreferences是這樣的:

String from = emailFrom.getText().toString(); // Getting String value from EditText and storing it in "from" String 
SharedPreferences settings = getSharedPreferences("MyPreferencesFile", 0); // Opening SharedPreferences 
SharedPreferences.Editor editor = settings.edit(); // Opening editor for SharedPreferences 
editor.putString("exampleName", from); // You are putting here a String "from" and give it a "exampleName" name. Later you will use this name to restore data. 

然後當您啓動應用程序,您需要從SharedPreferences加載數據:

SharedPreferences settings = getSharedPreferences("MyPreferencesFile", 0); // Again opening SharedPreferences 
String from = settings.getString("exampleName", ""); // The second argument is the default value. The default value will be set if there wasn't saved any data with "exampleName" name 
if(from != "") // If "from" is not empty, it means that the data was stored in SharedPreferences 
    emailFrom.setText(from); // Setting text in your EditText 
+2

您忘了['editor.commit()'](http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#commit%28%29):*「請注意,您必須調用commit ()在編輯器中執行的任何更改實際上都顯示在SharedPreferences中。「* – Tim

+0

我試過實踐上面的代碼,但無濟於事(與editor.commit())。當你說你需要從SharedPreferences加載數據時,你的意思是它應該存儲在OnCreate方法中? – Calgar99

+0

謝謝,我懂了。 – Calgar99

0

您正在使用onSaveInstanceState()onRestoreInstanceState()保存和恢復的EditText的內容。但是,只有當操作系統終止應用程序以立即重新創建(即設備旋轉)時,纔會調用此方法。

如果您希望在應用程序由用戶終止保留值,你需要存儲在某個地方,文件,數據庫或你的情況我建議SharedPreferences。

我已經張貼的答案,在一個類似的問題:SharePreferences

好運。