2015-01-16 9 views
1

Я хочу получить некоторые значения, которые сохраняются в sharedpreferences из одного действия и вызывать его в другом.Извлечение sharedpreferences в другом действии

В принципе, как я могу получить имя от первого действия и автоматически отображать его в поле во втором действии?

Так, например, у меня есть это, что сохраняет в предпочтениях.

public class Settings extends Activity { 
    EditText editText; 
    Button button; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.settings); 
     editText = (EditText) findViewById(R.id.editText); 
     button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new Button_Clicker()); 
     loadSavedPreferences(); 

    } 
    private void loadSavedPreferences() { 
     SharedPreferences sharedPreferences = PreferenceManager 
       .getDefaultSharedPreferences(this); 

     String name = sharedPreferences.getString("name", "Your Name"); 
     editText.setText(name); 

    } 

    private void savePreferences(String key, String value) { 
     SharedPreferences sharedPreferences = PreferenceManager 
       .getDefaultSharedPreferences(this); 
     Editor editor = sharedPreferences.edit(); 
     editor.putString(key, value); 
     editor.commit(); 
    } 

    class Button_Clicker implements Button.OnClickListener { 
     public void onClick(View v) { 

      savePreferences("name", editText.getText().toString()); 
      finish(); 
     } 
    } 

} 

Теперь у меня есть другая деятельность, где я могу использовать значение вместо этого набираясь снова:

public class Details extends Activity { 

    EditText nameText; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.details); 
     nameText = (EditText) findViewById(R.id.nameText); 


     Button button = (Button) findViewById(R.id.calculate); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
           } 
     }); 
    } 
+0

Использование SharedPreferences уже объяснено в этом сообщении: http://stackoverflow.com/questions/3624280/how-to-use-sharedpreferences-in-android-to-store-fetch-and-edit-values ​​ – Robbe

+0

См. Ответ в этой ссылке http://stackoverflow.com/questions/23137710/android-how-to-get-data-in-a-shared-preference-of-one-activity-to-another-acti/42943815# 42943815 – Sunil

ответ

5

Одна из хороших вещей о SharedPreference класса является то, что он предназначен, чтобы быть доступным для любой Activity в пределах вашего приложения. Вы можете получить любой SharedPreference с двумя простыми вызовами:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
String desiredPreference = sharedPreferences.getString("NameOfSharedPreference", "DefaultValue"); 

Хотя это может показаться очевидным, убедитесь, что вы на самом деле создаются и хранятся данные, которые вы хотите сохранить, прежде чем пытаться восстановить его. Чтобы продолжить на примере выше, используйте следующий фрагмент кода для хранения данных в SharedPreferences:

Editor editor = sharedPreferences.edit(); 
editor.putString("NameOfSharedPreference", "ValueToStore"); 
editor.commit(); 
+0

Как сделать значение отображаемым в конкретном текстовом поле, не получая ошибок в новом действии. Например, у меня есть: nameText = (EditText) findViewById (R.id.nameText); Как получить здесь сохраненное значение? Вот где я запутался. – user3411002

+0

Вы не можете извлечь часть данных из «SharedPreferences», не произнеся первую часть данных. Я изменил свой ответ, чтобы отразить это ... – Willis

+0

Ну, я уверен, что я сохранил данные в sharedpreference, посмотрев на мой код. Я могу получить его и отредактировать его в этом действии, но я хочу получить и отредактировать новое действие в новом текстовом поле. Когда я пытаюсь восстановить его, приложение падает. – user3411002

1

Вы можете назвать «PreferenceManager.getDefaultSharedPreferences (контекст)» от любой деятельности ваших приложений.

Я думаю, что у вас есть ошибка в вашем коде: положите "editText.setText (weight)" вместо editText.setText (name);

+0

Простите, я использовал старый код для другой программы, которую я сделал. Обновил мой пост с этим ха-ха. Мой главный вопрос: как я могу отобразить данные, полученные в текстовом поле, например, у меня есть поле edittext для другого действия, как я могу отобразить на нем извлеченные данные. – user3411002

Смежные вопросы