Android Sharedpreferences Example
Sebelumnya sudah saya bahas sharedpreferences di android dengan satu value dapat di lihat kembali di sini. Kemarin salah satu temen ada yang nanya, bagaimana kita bisa menggunakannya untuk beberapa nilai yang di simpan, Misalnya untuk meynimpan beberapa nama, caranya adalah dengan menggunakan Set<String> caranya gampang banget, bisa mengedit project sebelumnya atau dengan cara berikut ini :
- Sama seperti biasa kita buat project baru
- buat tampilannya seperti berikut ini ada textview, edit text, button
xmlnya adalah : activity_main.xml<RelativeLayout 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" tools:context="com.example.shareprefmulti.MainActivity$PlaceholderFragment" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/nama" /> <EditText android:id="@+id/nameIn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="17dp" android:ems="10" android:inputType="textPersonName" > <requestFocus /> </EditText> <ImageButton android:id="@+id/imageButton1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/nameIn" android:layout_below="@+id/nameIn" android:onClick="saving" android:src="@drawable/ic_action_user_add" /> <ImageButton android:id="@+id/imageButton2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/imageButton1" android:layout_toRightOf="@+id/imageButton1" android:onClick="refreshing" android:src="@drawable/ic_action_refresh" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/imageButton1" android:layout_below="@+id/imageButton1" android:layout_marginTop="32dp" android:text="" /> </RelativeLayout>
penjelasannya sama seperti sebelumnya
- kemudian buat package baru com.example.shareprefmulti.UiGet dan buat sebuah class yang namanya uiGet sourcecodenya seperti sebelumnya atau copy dibawah ini :uiGet.java :
package com.example.shareprefmulti.UiGet; import android.app.Activity; import android.widget.EditText; import android.widget.TextView; public class uiGet { public static void displayText(Activity activity, int id, String text) { TextView tv = (TextView) activity.findViewById(id); tv.setText(text); } public static String getText(Activity activity, int id) { EditText et = (EditText) activity.findViewById(id); return et.getText().toString(); } }
- Kemudian di MainActivity.java sama seperti sebelumnya tetapi ada yang berbeda ketika kita menyimpan data dan menampilkan data perubahanya adalah code berikut ini :Deklarasikan variable-variable berikut
private static String logtag ="logtag"; private static String NAME = "name"; String prefValue ; Set<String> sets = new HashSet<String>(); private SharedPreferences saveName;
logtag = untuk debuging di logcatnya
NAME = variable key untuk sharedpreferences
prefValue = variable untuk menerima inputan user
sets = ini adalah variable kunci agar dapat menyimpan value lebih dari 1 referensinya ada di dokumentasi java di http://docs.oracle.com/javase/7/docs/api/java/util/Set.html
saveNama = variable untuk mengatur keluar masuknya data dari sharedpreferences.Kemudian kita membuat 2 method yaitu method saving dan refreshing, method saving untuk ketika user mengeklik button save dan refreshing dipanggil ketika user mengeklik button reload, yang nantinya akan tampil di text view.
Method saving :
public void saving(View v){ Log.i(logtag, "checked"); SharedPreferences.Editor editor = saveName.edit(); prefValue = uiGet.getText(this, R.id.nameIn); sets.add(prefValue); editor.putStringSet(NAME, sets); editor.commit(); uiGet.displayText(this, R.id.textView2, "Saved"); }
jangan lupa argument View karena ini adalah menantakan bahwa ada sebuah event yang di pass lewat method ini.
log.i() = method untuk menampilkan informasi di logcat jika method ini dipanggil dia akan muncul di logcat.
editor = untuk memodifikasi I/O di sharedpreferences
uiGet.getText() = method yang kita buat pada package sebelumnya yaitu method yang ada di class uiGet
sets.add() = Adds the specified element to this set if it is not already present (optional operation). ini adalah method untuk menambahkan nilai menjadi sebuah himpunan (set). sets sendiri adalah variable yang kita buat dari Set<String>
editor.putStringSet(NAME, sets); = methot untuk menyimpan nilai string bisa juga berupa integer, long dll.
editor.commit(); = untuk menyimpan dan mengirimnya ke sharedpreferences.
uiGet.displayText() = method yang kita buat pada package sebelumnya yaitu method yang ada di class uiGetkemudian di metho refreshing() :
public void refreshing(View v){ Log.i(logtag, "refreshed"); //String value = saveName.getString(NAME,"Not Found"); String value = ""; Set<String> getset = saveName.getStringSet(NAME, null); Object[] display = getset.toArray(); for(int s = 0; s < display.length;s++){ value += display[s]+"\n"; } uiGet.displayText(this, R.id.textView2,value); }
Set<String> getset = variable untuk mendapatkan set yang sudah disimpan dalam XML yang memiliki key = NAME
Object[] display = variable untuk menyimpan array dari set yang sudah di dapatkan sebelumnya dengan mengibah set tersebut menjadi array dengan cara getset.toArray();
kemudian di looping seperti biasasehingga lengkapnya MainActivity.java menjadi seperti berikut ini :
package com.example.shareprefmulti; import java.util.HashSet; import java.util.Set; import com.example.shareprefmulti.UiGet.uiGet; import android.annotation.SuppressLint; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @SuppressLint("NewApi") public class MainActivity extends Activity { private static String logtag ="logtag"; private static String NAME = "name"; String prefValue ; Set<String> sets = new HashSet<String>(); private SharedPreferences saveName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); saveName = getPreferences(MODE_APPEND); //saveName = getSharedPreferences(NAME, MODE_PRIVATE); } public void saving(View v){ Log.i(logtag, "checked"); SharedPreferences.Editor editor = saveName.edit(); prefValue = uiGet.getText(this, R.id.nameIn); sets.add(prefValue); editor.putStringSet(NAME, sets); editor.commit(); uiGet.displayText(this, R.id.textView2, "Saved"); } public void refreshing(View v){ Log.i(logtag, "refreshed"); //String value = saveName.getString(NAME,"Not Found"); String value = ""; Set<String> getset = saveName.getStringSet(NAME, null); Object[] display = getset.toArray(); for(int s = 0; s < display.length;s++){ value += display[s]+"\n"; } uiGet.displayText(this, R.id.textView2,value); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
- hasilnya seperti ini
silahkan tinggalkan pesan kalo ada yang ditanyakan . . . 😀