2012-10-10 4 views
2

EditText 필드에 사용자 항목을 저장하려고하는데 응용 프로그램을 종료 할 때 나타나지 않습니다.Android : SharedPreferences. 올바르게 구현하는 방법

예를 들어 사용자가 이름을 입력 한 다음 응용 프로그램을 종료합니다. 사용자가 애플리케이션을 반환하고 실행하면 사용자 이름이 EditText 필드에 나타납니다. 그러나 나는 이것을 작동시킬 수 없다. sharedPreferences와 관련이 있다고 생각하지만 어디서 잘못 될지 잘 모르겠습니다.

저는 꽤 안드로이드와 자바에 매우 익숙합니다. 어떤 도움이라도 대단히 감사 할 것입니다.

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

Google 검색에서 ... 여기에 관해서는 대단히 일반적인 질문보다 온라인에서 샘플 코드를 찾는 것이 좋습니다. –

+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)를 잊어 버렸습니다 : * "커밋() 편집기에서 수행하는 모든 변경 내용을 실제로 SharedPreferences에 표시 할 수 있습니다. "* – Tim

+0

위의 코드를 사용했지만 아무런 소용이 없었습니다 (editor.commit() 사용). SharedPreferences에서 데이터를로드해야한다고 말하면 OnCreate 메서드에 저장해야한다는 의미입니까? – Calgar99

+0

고마워요, 잘 했어. – Calgar99

0

EditText의 내용을 저장하고 복원하려면 onSaveInstanceState()onRestoreInstanceState()을 사용하고 있습니다. 그러나이 메소드는 응용 프로그램이 즉시 다시 작성 될 OS (예 : 장치 순환)에 의해 종료 될 때만 호출됩니다.

사용자가 응용 프로그램을 종료 할 때 값을 유지하려면 어딘가에 파일, 데이터베이스를 저장해야하며, 경우에 따라 SharedPreferences를 제안해야합니다. SharePreferences

행운을 빕니다 :

나는 비슷한 질문에 답변을 게시했습니다.

관련 문제