Shared Preferences

Versi 1.0

1. Mengenal Shared Preferences

Menyimpan data pada aplikasi Android dapat dilakukan dengan beberapa cara, antara lain :

  • Shared Preferences
    Adalah penyimpanan data primitif pada file internal aplikasi dengan pasangan key-value.
  • Internal Storage
    Adalah penyimpanan data privat pada memory internal device.
  • External Storage
    Adalah penyimpanan data yang bersifat publik (dapat diakses siapapun) pada memory external device.
  • SQLite Databases
    Adalah penyimpanan data terstruktur pada database internal aplikasi.
  • Network Connection
    Adalah penyimpanan data pada server dengan perantara jaringan (internet).

Yang akan kita bahas pada artikel ini adalah penyimpanan data dengan Shared Preferences. Penyimpanan dengan metode ini merupakan penyimpanan data yang paling sederhana. Sederhana pada data yang disimpan maupun metode penyimpanannya. Data yang dapat disimpan hanyalah data primitif seperti int, boolean, float, long, dan String. Data disimpan dengan konsep pasangan Key-Value. Key digunakan sebagai id dari data dan Value adalah nilai datanya, misalnya key adalah “nama” dan value adalah nilai dari nama itu misalnya “dian”, sehingga pasangan Key-Valuenya adalah (key,value) = (“nama”,”dian”).

2. Implementasi Shared Preferences

Shared Preferences bisa dimanfaatkan untuk penyimpanan data yang sederhana. Saya akan mencontohkan penggunaan Shared Preferences sebagai seperti berikut ini.
Pertama kita buat xml layout pada file activity_main.xml seperti berikut ini.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Masukkan Nama : " />

    <EditText
        android:id="@+id/et_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/bt_save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Simpan" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Nama Tersimpan : " />

    <TextView
        android:id="@+id/tv_saved_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />

</LinearLayout>

Kemudian kita buat class MainActivity menjadi seperti berikut ini.

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

public class MainActivity extends Activity {

	private SharedPreferences pref;
	private final String KEY_NAME = "key_name";

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

		pref = getSharedPreferences("mypreferences", MODE_PRIVATE);

		showSavedName();

		final EditText etName = (EditText) findViewById(R.id.et_name);

		Button bSave = (Button) findViewById(R.id.bt_save);
		bSave.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				String name = etName.getText().toString();
				if(name.equals("")){
					Toast.makeText(MainActivity.this, 
                                              "Nama tidak boleh kosong",
                                              Toast.LENGTH_SHORT).show();
				}else{
					saveName(name);
					showSavedName();
				}
			}
		});
	}

	private void showSavedName(){
		String savedName = getSavedName();

		TextView tvSavedName = (TextView) findViewById(R.id.tv_saved_name);
		tvSavedName.setText(savedName);
	}

	private String getSavedName(){
		return pref.getString(KEY_NAME, "-"); 
	}

	private void saveName(String name){
		Editor editor = pref.edit();
		editor.putString(KEY_NAME, name);
		editor.commit();
	}
}

Jalankan project maka aplikasi akan berjalan seperti berikut ini.

1

2

3

Jika aplikasi kita tutup, kemudian kita jalankan lagi, maka pada Nama Tersimpan akan langsung muncul nama Jono. Karena nama terakhir yang disimpan adalah Jono. Maka terbukti bahwa data nama telah berhasil disimpan pada penyimpanan Shared Preferences.

4

Shared Preferences dapat dimanfaatkan untuk membuat berbagai penyimpanan sederhana seperti :

  • Session Account (username dan password) dari aplikasi
  • Data Pengaturan (Setting: bahasa, tema, volume, dsb) dari aplikasi
  • Dan Lain-Lain

3. Download Project

Untuk lebih memudahkan dan memahami tutorial ini, silakan download project-nya di sini dan jalankan di IDE anda.

Iklan

9 pemikiran pada “Shared Preferences

  1. Salam πŸ™‚
    Mbak butuh pencerahan nih. Saya lagi ngerjain program TA, untuk data kontennya yang mau ditampilkan itu lebih kurang 100an gitu, karena judulnya ensiklopedia. Nah jadi yang saya bingung, apakah untuk keseluruhan data itu harus kita buatkan 100 activity juga kah agar bisa ditampilkan? Atau hanya ada satu tampilan xml dan activity dasar yang kemudian mnjadi latar untuk menampilkan data-data yg sudah dimasukkan ke database sesuai judul yang dipilih?
    Mohon maaf bila out of topic mbak, terimakasih sebelumnya..

  2. maaf mas. saya ingin bertanya apa pada shared prefferencess ini yang di gunakan oleh instagram? lalu apakah bisa misal kan kita get data dari json dari server kemudian kita simpan di shared prefferencess seperti data string dan link image atau bahkan image itu sendiri? mohon masukkannya mas..

    • Kurang tahu juga ya apakah Instagram pakai shared preferences. Json adalah format data yg disimpan dalam string jadi bisa aja simpan json dalam shared preferences, link url juga bisa disimpan karna string, kalo image gak bisa karna shared preferences hanya nyimpan data primitive seperti String, integer, float, long dan boolean.

  3. satu lagi mas.. apa ada metode lain sperti menyimpan data pada sqlite database dr server? karena http connection udh ga support di v23 saya jd bngung..
    apa ada saran gmn cara menyimpan data nya ke android?

    • android api v23 memang tidak menyuport Apache http client, jd jangan gunakan itu, gunakan HttpUrlConnection untuk koneksi ke server. Cek link berikut https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client. Contoh penggunaan HttpUrlConnection seperti berikut :

      /**
      * Request to server using HTTP protocol with GET method
      * @param url
      * @return String message from server
      */
      public static String getRequest(String url) {
      try {
      int timeout = 5000;
      URL u = new URL(url);
      HttpURLConnection c = (HttpURLConnection) u.openConnection();

      c.setDefaultUseCaches(false);
      c.setUseCaches(false);
      c.setAllowUserInteraction(false);

      c.setRequestMethod(“GET”);
      c.setRequestProperty(“Content-length”, “0”);
      c.setRequestProperty(“Cache-Control”, “no-cache”);

      c.setConnectTimeout(timeout);
      c.setReadTimeout(timeout);
      c.connect();
      status = c.getResponseCode();

      BufferedReader br = new BufferedReader(new InputStreamReader(
      c.getInputStream()));
      StringBuilder sb = new StringBuilder();
      String line;
      while ((line = br.readLine()) != null) {
      sb.append(line + “\n”);
      }
      br.close();
      return sb.toString();

      } catch (SocketTimeoutException e) {
      Log.i(Helper.TAG, “”+e.toString());
      return REQUEST_SERVER_TIMEOUT;
      } catch (Exception e) {
      Log.i(Helper.TAG, “”+e.toString());
      return null;
      }

      Log.i(Helper.TAG, “Request uncatch return null”);
      return null;
      }

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s