Selasa, 08 April 2014

Shared Preferences Untuk Menyimpan Setting Aplikasi Android

Shared Preferences Untuk Menyimpan Setting Aplikasi Android sering dibutuhkan saat membuat aplikasi yang dapat menyimpan setting misalnya history username dan password atau setting koneksi, atau setting data yang pernah diinput agar pengguna tidak perlu mengetikkan lagi dan sebagainya.

Tetapi setting disini tidak harus serumit Database SQLite atau file setting di SDCard, kita tidak perlu membuat Database atau File secara khusus, sangat mudah dan sederhana. Data yang disimpan di setting ini bisa terhapus jika pengguna mereset (Clear Data) Aplikasi dari Settings-Apps-Aplikasi. Artinya jika di Windows setting ini seperti halnya Registry Windows, hanya saja karena Sistem Operasi Android bersifat Open Source dan Transparan, maka setting ini dapat dihapus Pengguna dengan mudah atau tidak dipersulit seperti halnya registry windows.



Pertama buat dahulu Project Android baru di Eclipse.

Kemudian pada MainActivity.java tidak perlu diubah seperti berikut ini :

package com.amijaya.android_sharedpreferences;

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

// http://cariprogram.blogspot.com
// nuramijaya@gmail.com

public class MainActivity extends Activity {

SharedPreferences prefs;
EditText editText1;
EditText editText2;
Button button1;
Button button2;

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

editText1 = (EditText)findViewById(R.id.editText1);
editText2 = (EditText)findViewById(R.id.editText2);
button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);

prefs = this.getSharedPreferences(
     "com.amijaya.android_sharedpreferences", Context.MODE_PRIVATE);

editText1.setText(prefs.getString("shared_username", ""));
editText2.setText(prefs.getString("shared_password", ""));

button1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Editor editor = prefs.edit();
editor.putString("shared_username", editText1.getText().toString());
editor.putString("shared_password", editText2.getText().toString());
editor.commit();
Toast.makeText(getApplicationContext(), "Shared Preferences Saved", Toast.LENGTH_LONG).show();
}
});

button2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
finish();
}
});

//GET
//if (prefs.contains("shared_nama")) //GKPAKE KYKNY GPP
   //{
   //     txtname.setText(prefs.getString("shared_nama", ""));
   //}

//SAVE
//Editor editor = sharedpreferences.edit();
//editor.putString("shared_nama", txtname.getText().toString());
   //editor.commit();

/*String dateTimeKey = "com.example.app.datetime";

// use a default value using new Date()
long l = prefs.getLong(dateTimeKey, new Date().getTime()); 
To edit and save preferences

Date dt = getSomeDate();
prefs.edit().putLong(dateTimeKey, dt.getTime()).commit();

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
 editor.putString("text", mSaved.getText().toString());
 editor.putInt("selection-start", mSaved.getSelectionStart());
 editor.putInt("selection-end", mSaved.getSelectionEnd());
 editor.commit();
To retrieve data from shared preference

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
if (restoredText != null) 
{
  //mSaved.setText(restoredText, TextView.BufferType.EDITABLE);
  int selectionStart = prefs.getInt("selection-start", -1);
  int selectionEnd = prefs.getInt("selection-end", -1);
  / *if (selectionStart != -1 && selectionEnd != -1)
  {
     mSaved.setSelection(selectionStart, selectionEnd);
  }* /
}
*/
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

}
package com.amijaya.desain_scrollview_kanan_kiri_atas_bawah_horizontalscrollview; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }

Untuk tampilan, buat desain tampilan berikut ini pada activity_main.xml, tambahkan dua buah TextView, dua buah EditText dan dua buah Button, susunlah menjadi seperti di bawah ini :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Username" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login (Save SharedPreferences)" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Exit" />

</LinearLayout>

Konfigurasi AndroidManifest.xml tidak perlu dirubah :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.amijaya.android_sharedpreferences"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.amijaya.android_sharedpreferences.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Hasilnya setelah dijalankan pertama kali, Aplikasi Android belum memiliki setting SharedPreferences  yang menyimpan Username dan Password, maka input masih kosong semua :


Ketika diklik Login, maka setting data yang terakhir kali diinput pada input Username dan Password akan disimpan di setting Shared Preferences. Tetapi proses Login memang belum diimplementasikan, sehingga penulis buat agar keluar dari Aplikasi :


Sehingga ketika Aplikasi dibuka lagi dari awal, maka kelihatan input Username dan Password sudah terisi data yang terakhir kali diinput :


File project selengkapnya dapat anda download disini. Jika bingung cara download, silakan lihat caranya disini.

Semoga berguna ^_^

2 komentar:

  1. Terima kasih admin, ini sangat membantu saya.

    BalasHapus
  2. kak mau nnyak nh apakah bisa data yang disimpan itu tersimpan di dalam file .csv ?

    Mohon pencerahannya kak ??

    Makash kkak

    BalasHapus