SharedPreferences – zapisywanie danych aplikacji | android4devs


Sierpień 5, 2011
Content Providers Podstawowe komponenty Przechowywanie danych Tutoriale

SharedPreferences jest klasą, która dostarcza nam lekkiego dla systemu mechanizmu pozwalającego na przechowywanie niewielkich ilości danych. Z założenia mechanizm ten powinien przechowywać informacje o ustawieniach interfejsu, aplikacji itp. Jego ograniczeniem jest obsługa tylko prostych typów danych (boolean, float, int, long, String). Natomiast zaletą tego mechanizmu jest współdzielenie danych pomiędzy wszystkimi komponentami aplikacji. Dane oczywiście są przechowywane nawet po ponownym uruchomieniu naszego programu.

Stworzymy teraz niewielką aplikację, która pozwoli nam na przechowanie danych pola tekstowego pomiędzy jej kolejnymi uruchomieniami.

Interfejs aplikacji będzie złożony z pola tekstowego oraz przycisku służącego do zapisywania danych. Oto kod źródłowy Aktywności z dwoma metodami wymagającymi implementacji:

Zaczniemy od dostarczenia odpowiednich pól do naszej Aktywności:

W linijce 24 następuje inicjalizacja obiektu SharedPreferences, odbywająca się za pomocą metody Aktywności – getSharedPreferences(String name, int mode). Przyjmuje ona dwa parametry:

Uwaga – istnieje również druga metoda Aktywności dająca dostęp do ustawień – getPreferences(). Tworzy ona plik ustawień dla konkretnej Aktywności. Przydaje się wtedy gdy potrzebujemy zapisywać dane tylko jednego okna aplikacji i nie mamy zamiaru ich współdzielić.

Zapisywanie danych jako SharedPreferences odbywa się za pomocą klasy SharedPreferences.Editor. Cały proces sprowadza się do 3 kroków:

Tak prezentuje się to w naszym przykładzie:

Proces odczytywania danych jest jeszcze prostszy. Wystarczy bowiem skorzystać z metod get…() wywoływanych na obiekcie SharedPreferences. Przyjmują one dwa parametry – klucz oraz wartość domyślną na wypadek gdyby pod danym kluczem nie występowała żadna wartość.

I w tym momencie zakończyliśmy pracę z naszym przykładem prezentującym działanie SharedPreferences.

Podczas pierwszego uruchomienia naszej aplikacji zapisujemy przykładowy tekst:

Po ponownym uruchomieniu aplikacji ujrzymy:

Cały projekt dostępny jest na naszym githubie – HelloSharedPreferences.

MainActivity.java

,

 

[…] SharedPreferences – zapisywanie danych aplikacji […]

[…] z klasy SharedPreferences do zapisania ustawień w bieżącym profilu, korzystając z tutoriala SharedPreferences – zapisywanie danych aplikacji | android4devs -tworze sobie plik xml w którym są zapisane ustawienia […]

Zaloguj się lub skorzystaj z profilu:

Możesz również zostawić komentarz bez rejestracji, korzystając z poniższego formularza:

Musisz być zalogowany aby móc pisać komentarze.

SharedPreferences – zapisywanie danych aplikacji

Powiązane linki

Przykładowa aplikacja

Przygotowania

Obsługa SharedPreferences

Działanie, zrzuty ekranu

Kompletny kod źródłowy

Komentarze (2)

Prześlij komentarz

Zapisywanie danych

Odczytywanie danych

  • Nazwę pliku, w których przechowywane są ustawienia
  • Tryb w jakim ma być otwarty plik z naszymi ustawieniami (MODE_PRIVATE jest domyślnym trybem, który dostęp do naszych ustawień daje tylko aplikacji, która się do nich odnosi).
  1. otwórz edytor (metoda edit() obiektu SharedPreferences),
  2. wpisz dane (metody put…() obiektu SharedPreferences.Editor – argumentami są klucz i wartość),
  3. zapisz zmiany (metoda commit() obiektu SharedPreferences.Editor).
public class MainActivity extends Activity {
	private EditText etToSave;
	private Button btnSave;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		etToSave = (EditText) findViewById(R.id.etToSave);
		btnSave = (Button) findViewById(R.id.btnSave);
		initButtonOnClick();
		restoreData();
	}

	private void initButtonOnClick() {
		btnSave.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				saveData();
				showToast("Data saved");
			}
		});
	}

	private void showToast(String msg) {
		Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
	}
}
public class MainActivity extends Activity {
	private static final String PREFERENCES_NAME = "myPreferences";
	private static final String PREFERENCES_TEXT_FIELD = "textField";
	private EditText etToSave;
	private Button btnSave;

	private SharedPreferences preferences;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		preferences = getSharedPreferences(PREFERENCES_NAME, Activity.MODE_PRIVATE);
		etToSave = (EditText) findViewById(R.id.etToSave);
		btnSave = (Button) findViewById(R.id.btnSave);
		initButtonOnClick();
		restoreData();
	}

	private void initButtonOnClick() {
		btnSave.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				saveData();
				showToast("Data saved");
			}
		});
	}

	private void showToast(String msg) {
		Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
	}
}
	private void saveData() {
		SharedPreferences.Editor preferencesEditor = preferences.edit();
		String editTextData = etToSave.getText().toString();
		preferencesEditor.putString(PREFERENCES_TEXT_FIELD, editTextData);
		preferencesEditor.commit();
	}
	private void restoreData() {
		String textFromPreferences = preferences.getString(PREFERENCES_TEXT_FIELD, "");
		etToSave.setText(textFromPreferences);
	}
package pl.froger.hellosharedpreferences;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
	private static final String PREFERENCES_NAME = "myPreferences";
	private static final String PREFERENCES_TEXT_FIELD = "textField";
	private EditText etToSave;
	private Button btnSave;

	private SharedPreferences preferences;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		preferences = getSharedPreferences(PREFERENCES_NAME, Activity.MODE_PRIVATE);
		etToSave = (EditText) findViewById(R.id.etToSave);
		btnSave = (Button) findViewById(R.id.btnSave);
		initButtonOnClick();
		restoreData();
	}

	private void initButtonOnClick() {
		btnSave.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				saveData();
				showToast("Data saved");
			}
		});
	}

	private void saveData() {
		SharedPreferences.Editor preferencesEditor = preferences.edit();
		String editTextData = etToSave.getText().toString();
		preferencesEditor.putString(PREFERENCES_TEXT_FIELD, editTextData);
		preferencesEditor.commit();
	}

	private void restoreData() {
		String textFromPreferences = preferences.getString(PREFERENCES_TEXT_FIELD, "");
		etToSave.setText(textFromPreferences);
	}

	private void showToast(String msg) {
		Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
	}
}


2
komentarze

Przewijanie do góry