Anda di halaman 1dari 12

MODUL MEMBUAT APLIKASI LOGIN DENGAN

SQLITE DATABASE

Ada beberapa aplikasi Android yang membutuhkan authentikasi sebelum masuk ke halaman
utama. Authentikasi berguna untuk mengenali siapa yang akan menggunakan aplikasi serta apa
saja hak aksesnya. Apa saja contohnya?, aplikasi mobile banking, inventory, bahkan aplikasi
tagihan internet juga perlu authentikasi login untuk mengenali pemakainya.

Buat Project Baru


Buatlah project baru dengan nama "Tutorial Login Sederhana". Caranya buka menu File ->
New -> New Project hingga muncul form berikut :

Isilah kolom Application Name dan Company Domain lalu klik tombol Next untuk melanjutkan
proses ke pilihan Target Device.

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
Persiapkan Resource String, Dimens, dan Colors
File - file resource berada di dalam folder app -> src -> main ->res ->values.

1. File colors.xml untuk menyimpan variable warna


2. strings.xml berisi variable semua text
3. styles.xml untuk menampung variable untuk konfigurasi tema.

Color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="colorRed">#e13d5f</color>
<color name="colorGrey">#ebebeb</color>
<color name="colorWhite">#ffffff</color>

<color name="alertPrimary">#cce5ff</color>
<color name="alertPrimaryFontColor">#004085</color>
<color name="alertSuccess">#d4edda</color>
<color name="alertSuccessFontColor">#155724</color>
<color name="alertDanger">#f8d7da</color>
<color name="alertDangerFontColor">#721c24</color>
<color name="alertWarning">#fff3cd</color>
<color name="alertWarningFontColor">#856404</color>
<color name="alertInfo">#d1ecf1</color>
<color name="alertInfoFontColor">#0c5460</color>

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
<color name="alertSecondary">#e2e3e5</color>
<color name="alertSecondaryFontColor">#383d41</color>

<color name="btnPrimary">#007bff</color>
<color name="btnSecondary">#6c757d</color>
<color name="btnSuccess">#28a745</color>
<color name="btnDanger">#dc3545</color>
<color name="btnWarning">#ffc107</color>
<color name="btnInfo">#17a2b8</color>

</resources>

Strings.xml
<resources>
<string name="app_name">Tutorial Login Sederhana</string>

<string name="title_activity_login">Sign in or create an


account</string>
<string name="title_activity_main">Dashboard</string>

<string name="prompt_email">Email</string>
<string name="prompt_password">Password</string>
<string name="prompt_password_repeat">Password (Diulang)</string>
<string name="prompt_name">Nama Lengkap</string>
<string name="prompt_phone">Nomor Telepon</string>
<string name="action_sign_in">Masuk atau Mendaftar</string>
<string name="action_sign_in_short">Masuk</string>
<string name="action_register">Buat akun baru?</string>
<string name="action_have_account">Sudah memiliki akun?</string>
<string name="action_submit">Kirim</string>
<string name="error_invalid_email">Alamat email tidak
valid</string>
<string name="error_unavailable_email">Email sudah pernah
terdaftar</string>
<string name="error_invalid_password">Password tidak valid</string>
<string name="error_invalid_password_repeat">Ulangi password dengan
benar</string>
<string name="error_incorrect_password">Password yang Anda masukkan
salah</string>
<string name="error_old_password">Password lama salah</string>
<string name="error_field_required">Kolom ini tidak boleh
dikosongi</string>
<string name="permission_rationale">"Izin kontak diperlukan untuk
menyediakan penyelesaian email."</string>
<string name="login_header_information">Isilah form ini dengan akun
login anda,
atau buat akun terlebih dahulu untuk dapat menggunakan aplikasi
ini.</string>

<string name="txt_welcome">Selamat datang</string>

<string name="btn_logout">Logout</string>
</resources>

Tambahkan 1 file resource dalam folder yang sama dengan file di atas dengan nama file dimens.xml
untuk menampung varible dimensi atau ukuran margin, padding, dan lain - lain.

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
Dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>

Database dan Beberapa Utility-nya


Android sudah menyediakan class untuk berinteraksi dengan database yakni
SQLiteOpenHelper. Buatlah folder baru atau Package dengan nama utils di dalam folder app
-> src -> main -> java -> com -> slightsite -> tutorialloginsederhana.
Lebih mudah buat folder tersebut di Android Studio cukup dengan klik kanan folder
com.slightsite.tutorialloginsederhana lalu pilih New -> Package dan beri nama "utils".
Setelah folder atau package terbuat lalu buat 3 file dalam folder tersebut yakni Database.java,
DatabaseContents.java, dan DatabaseHelper.java.

Database.java || Class Database berisi default method untuk membaca, menyimpan, mengubah,
dan menghapus data.
package com.slightsite.tutorialloginsederhana.utils;

import java.util.List;

public interface Database {

/**
* Selects something in database.
* @param queryString query string for select in database.
* @return list of object.
*/
public List<Object> select(String queryString);

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
/**
* Inserts something in database.
* @param tableName name of table in database.
* @param content string for using in database.
* @return id of row data.
*/
public int insert(String tableName, Object content);

/**
* Updates something in database.
* @param tableName name of table in database.
* @param content string for using in database.
* @return true if updates success ; otherwise false.
*/
boolean update(String tableName, Object content);

/**
* Deletes something in database.
* @param tableName name of table in database.
* @param id a specific id of row data for deletion.
* @return true if deletion success ; otherwise false.
*/
boolean delete(String tableName, int id);

/**
* Directly execute to database.
* @param queryString query string for execute.
* @return true if executes success ; otherwise false.
*/
boolean execute(String queryString);
}

DatabaseContents.java || Class DatabaseContents ini berguna untuk mendefinisikan nama database


serta nama tabel - tabelnya.
package com.slightsite.tutorialloginsederhana.utils;

public enum DatabaseContents {

DATABASE("loginsederhana.db"),
TABLE_USERS("tbl_users");

private String name;

/**
* Constructs DatabaseContents.
* @param name name of this content for using in database.
*/
private DatabaseContents(String name) {
this.name = name;
}

@Override
public String toString() {
return name;
}
}

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
DatabaseHelper.java || DatabaseHelper inilah yang akan selalu dipanggil untuk berinteraksi dengan
tabel tertentu di dalam database baik untuk mengambil data, membuat data baru, mengubah, serta
menghapus data.
package com.slightsite.tutorialloginsederhana.utils;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

public class DatabaseHelper extends SQLiteOpenHelper implements Database {

// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME =
DatabaseContents.DATABASE.toString();

public DatabaseHelper(Context context) {


super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {

db.execSQL("CREATE TABLE " + DatabaseContents.TABLE_USERS + "("


+ "_id INTEGER PRIMARY KEY,"
+ "name TEXT(100),"
+ "email TEXT(32),"
+ "password TEXT(256),"
+ "phone TEXT(32),"
+ "status INTEGER DEFAULT 1,"
+ "date_added DATETIME"
+ ");");

Log.d("CREATE DATABASE", "Create " + DatabaseContents.TABLE_USERS +


" Successfully.");
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + DatabaseContents.TABLE_USERS);

// Create tables again


onCreate(db);
}

@Override
public List<Object> select(String queryString) {

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
try {
SQLiteDatabase database = this.getWritableDatabase();
List<Object> list = new ArrayList<Object>();
Cursor cursor = database.rawQuery(queryString, null);

if (cursor != null) {
if (cursor.moveToFirst()) {
do {
ContentValues content = new ContentValues();
String[] columnNames = cursor.getColumnNames();
for (String columnName : columnNames) {
content.put(columnName, cursor.getString(cursor
.getColumnIndex(columnName)));
}
list.add(content);
} while (cursor.moveToNext());
}
}
cursor.close();
database.close();
return list;

} catch (Exception e) {
e.printStackTrace();
return null;
}
}

@Override
public int insert(String tableName, Object content) {
try {
SQLiteDatabase database = this.getWritableDatabase();

int id = (int) database.insert(tableName, null,


(ContentValues) content);

database.close();
return id;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}

@Override
public boolean update(String tableName, Object content) {
try {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues cont = (ContentValues) content;
// this array will always contains only one element.
String[] array = new String[]{cont.get("_id")+""};
database.update(tableName, cont, " _id = ?", array);
return true;

} catch (Exception e) {
e.printStackTrace();
return false;
}
}

@Override

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
public boolean delete(String tableName, int id) {
try {
SQLiteDatabase database = this.getWritableDatabase();
database.delete(tableName, " _id = ?", new String[]{id+""});
return true;

} catch (Exception e) {
e.printStackTrace();
return false;
}
}

@Override
public boolean execute(String queryString) {
try{
SQLiteDatabase database = this.getWritableDatabase();
database.execSQL(queryString);
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
}

Buat Controller Sebagai Alat Komunikasi Antara Activity


dengan Database
Berbagai urusan yang berkaitan dengan View atau antarmuka yang nampak oleh pengguna
akan dikelola di dalam class Activity. Jika Activity ingin berinteraksi dengan database maka
untuk lebih mudah dan rapi kita gunakan Controller.

Gunakan prosedur yang sama dengan membuat class untuk database di atas. Buat folder atau
package baru dengan nama "controllers" di dalam folder app -> src -> main -> java -> com
-> slightsite -> tutorialloginsederhana dan ciptakan class baru dengan nama
"UserControlle r" di file UserController.java.

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
UserController.java
package com.slightsite.tutorialloginsederhana.controllers;

import android.content.ContentValues;

import com.slightsite.tutorialloginsederhana.utils.Database;
import com.slightsite.tutorialloginsederhana.utils.DatabaseContents;

import java.util.List;

public class UserController {


private static Database database;
private static UserController instance;

private UserController() {}

public static UserController getInstance() {


if (instance == null)
instance = new UserController();

return instance;
}

/**
* Sets database for use in this class.
* @param db database.
*/
public static void setDatabase(Database db) {
database = db;
}

public ContentValues getDataByEmail(String email) {


String queryString = "SELECT * FROM " +
DatabaseContents.TABLE_USERS + " WHERE email = '"+ email +"'";
List<Object> contents = database.select(queryString);

if (contents.isEmpty()) {
return null;
}

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
ContentValues content = (ContentValues) contents.get(0);
return content;
}

public Object getUsers() {


List<Object> contents = database.select("SELECT * FROM " +
DatabaseContents.TABLE_USERS);

return contents;
}

public int register(ContentValues content) {


int id = database.insert(DatabaseContents.TABLE_USERS.toString(),
content);

return id;
}

public boolean update(ContentValues content) {


boolean update =
database.update(DatabaseContents.TABLE_USERS.toString(), content);

return update;
}
}

Form Login dan Registrasi Akun Baru


Membuat form login dan form registrasi akun baru untuk pengguna. Caranya buat activity baru
dengan nama "LoginActivty". Klik kanan folder com.slightsite.tutorialloginsederhana di
dalam folder java, pilih New -> Java Class hingga muncul form berikut :

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
Buat juga file activity_login.xml di folder res -> layout. Cara lainnya yang lebih mudah agar
file LoginActivity.java dan activity_login.xml tergenerate secara otomatis adalah dengan klik
kanan folder com.slightsite.tutorialloginsederhana di dalam folder java lalu pilih New ->
Activity -> Basic Activity . Jika berhasil, maka akan ada 2 file baru di dalam folder berikut :

LoginActivity.java || ADA DI NOTEPAD

activity_login.xml || ADA DI NOTEPAD

Pastikan LoginActivity sudah terdefinisi di file AndroidManifest.xml agar activity ini dapat
digunakan. Letak file tersebut ada di folder app -> src -> main. Jadikan LoginActivity sebagai
main intent agar activity ini di eksekusi pertama kali saat aplikasi dibuka.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.slightsite.tutorialloginsederhana">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom
android:name=".LoginActivity"
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=".MainActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait" />
</application>

</manifest>

Siapkan Halaman Utama atau Dashboard Setelah Login


Jika user sukses login atau registrasi maka user akan di tampilkan ke halaman utama. Kita
buatkan halaman dashboard sederhana serta tombol logout untuk menghapus session login.

Update file activity_main.xml dan MainActivity.java dengan code berikut :

activity_main.xml || ADA DI NOTEPAD

MainActivity.java || ADA DI NOTEPAD

Modul Database SQLite | Pemrograman Aplikasi Mobile| JTD | David Bayu F, S.Kom., M.Kom

Anda mungkin juga menyukai