Software Enginering

user cukup login sekali saja ketika aplikasi pertama kali dijalankan
Problem :
Saya ingin membuat aplikasi yang dilengkapi degna halaman autentifikasi login. Skenario yang saya inginkan adalah user cukup login sekali saja ketika aplikasi pertama kali dijalankan. Selanjutnya jika membuka aplikasi, user langsung masuk ke activity yang lain. Yap, hampir sama dengan aplikasi facebook, twitter, pinterest dll. Skenario mereka semua hampir sama yaitu sekali login ketika pertama kali aplikasi dijalankan. Dari mana saya harus memulainya?
Solusi :
Android mempunyai beberapa cara untuk menangani penyimpanan data (data storage) dengan penjelasan singkat seperti berikut.
1. data storage menggunakan SQLite : untuk menangani data yang terstruktur
2. data storage menggunakan SharedPreference : berupa key-value-pair dan digunakan untuk menangani data non-structured
3. data storage menggunakan SDCard : biasanya untuk menyimpan file-file hasil download / log
Nah permasalahan diatas dapat diselesaikan dengan memanfaatkan sharedpreference. SharedPreference biasanya dimanfaatkan juga untuk menyimpan data-data setting misalnya tingkat contrast layar, nada dering, password, username dsb. Perhatikan penjelasan berikut ini.
Kita akan membuat aplikasi sederhana dengan urutan logic seperti berikut
1. jalanakn aplikasi
2. check sharedpreference apakah sudah tersimpan data usernmae dan password ? jika sudah maka aplikasi langsung diarahkan ke activity berikutnya
3. Jika belum, aplikasi tetap ditahan pada activity login supaya user memasukkan username&password
4. Button login ditekan, menimpan data username & password ke dalam sharedpreferencce kemudian mengarahkan ke activity berikutnya
5. ulangi langkah ke -2.
6. Jika ditekan button logout maka data username dan password dihapus.
Nih, saya kasih screenshootnya duu deh biar kebayang bagaiman wujud aplikasi yang akan kita buat

login page

home page

Untuk lebih jeasnya, yuk kita praktekkan dengan membuat project sederhana
  1. buat project dengan nama SigninApp
  2. siapkan dahulu dua buah layout yaitu activity_main.xml dan activity_home.xml dengan code seperti berikut ini
    <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=".MainActivity" >
     
        <TextView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="87dp"
            android:text="Please, Login" />
     
        <EditText
            android:id="@+id/inusername"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/message"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="18dp"
            android:ems="10"
            android:hint="username" >
     
            <requestFocus />
        </EditText>
     
        <EditText
            android:id="@+id/inpassword"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/inusername"
            android:layout_below="@+id/inusername"
            android:layout_marginTop="18dp"
            android:ems="10"
            android:hint="********"
            android:inputType="textPassword" />
     
        <Button
            android:id="@+id/bsignin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/inpassword"
            android:layout_alignRight="@+id/inusername"
            android:layout_below="@+id/inpassword"
            android:layout_marginTop="18dp"
            android:text="sign in" />
     
    </RelativeLayout>

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        android:gravity="center"
        android:orientation="vertical" >
     
        <TextView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
     
        <Button
            android:id="@+id/bsignout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="logout" />
     
    </LinearLayout>
  3. kita oprek dulu bagian MainActivity.java dengan sourcode seperti berikut
    package com.sign.in.app;
     
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    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;
     
    public class MainActivity extends Activity {
     
     Button bsignin;
     EditText inuser, inpass;
     
     String username = "namaku";
     String password = "namaku123";
     String preferencename = "DataPreference";
     
     SharedPreferences sp;
     SharedPreferences.Editor spe;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
     
      sp = this.getSharedPreferences(preferencename, 0);
      spe = sp.edit();
     
      bsignin = (Button) findViewById(R.id.bsignin);
      inuser = (EditText) findViewById(R.id.inusername);
      inpass = (EditText) findViewById(R.id.inpassword);
     
      bsignin.setOnClickListener(new OnClickListener() {
     
       @Override
       public void onClick(View arg0) {
        // TODO Auto-generated method stub
        String u = inuser.getText().toString();
        String p = inpass.getText().toString();
     
        if (!u.equals("") && !p.equals("")) {
         matching(u, p);
        } else {
         ShowToast("fill the field. please..");
        }
       }
      });
     
      if (sp.contains("username") && sp.contains("password")) {
       GoestoNextActivity();
      }
     
     }
     
     protected void matching(String u, String p) {
      // TODO Auto-generated method stub
      if (u.equals(username) && p.equals(password)) {
       // pindah activity
       spe.putString("username", u);
       spe.putString("password", p);
       spe.commit();
       GoestoNextActivity();
      } else {
       ShowToast("wrong username or password");
       spe.clear();
      }
     }
     
     protected void ShowToast(String pesan) {
      // TODO Auto-generated method stub
     
      Toast.makeText(getApplicationContext(), pesan, Toast.LENGTH_SHORT)
        .show();
     }
     
     private void GoestoNextActivity() {
      // TODO Auto-generated method stub
      Intent intent = new Intent(MainActivity.this, HomeActivity.class);
      startActivity(intent);
      finish();
     }
     
     @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;
     }
     
    }
  4. tambahkan class baru dengan nama HomeActivity.java dengan code seperti berikut
    package com.sign.in.app;
     
    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.TextView;
     
    public class HomeActivity extends Activity {
     
     SharedPreferences sp;
     SharedPreferences.Editor spe;
     
     String preferencename = "DataPreference";
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      // TODO Auto-generated method stub
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_home);
     
      sp = this.getSharedPreferences(preferencename, 0);
      spe = sp.edit();
      String u = sp.getString("username", "");
      String p = sp.getString("password", "");
     
      TextView msg = (TextView) findViewById(R.id.message);
      msg.setText("Hi " + u + ", your password is " + p + "\n"
        + "Enjoy your coding.");
     
      Button bsignout = (Button) findViewById(R.id.bsignout);
      bsignout.setOnClickListener(new OnClickListener() {
     
       @Override
       public void onClick(View arg0) {
        // TODO Auto-generated method stub
        spe.clear();
        spe.commit();
        finish();
       }
      });
     
     }
    }
  5. daftarkan activity yang baru kedelam AndroidManifest seperti baris 25 berikut
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.sign.in.app"
        android:versionCode="1"
        android:versionName="1.0" >
     
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="14" />
     
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.sign.in.app.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>
            <activity android:name="HomeActivity" >
            </activity>
        </application>
     
    </manifest>
Nah! selesai.
Sekarang jalankan aplikasi dengan skenario seperti berikut
  1. masukkan username / password yg salah
  2. masukkan username dan password dengan benar, maka aplikasi akan pindah menuju activity berikutnya
  3. keluar aplikasi dengan menekan tombol back / home
  4. jalan kan aplikasi lagi,  maka aplikasi akan langsung pindah menuju activity berikutnya tanpa login
  5. tekan tombol logout kemudian ulangi langkah ke 3

Diberdayakan oleh Blogger.