Blog Tutorial Android Bagi Pemula

Monday, November 16, 2020

Contoh Sederhana Menggunakan SQLite Database Android (Aplikasi Catatan)

Pada artikel ini blog gwnbs akan berbagi tentang contoh penggunaan SQLite Database pada aplikasi Android. SQLite Database memiliki metode untuk membuat, menghapus, menjalankan perintah SQL, dan melakukan tugas manajemen database umum lainnya. Dalam tutorial ini kita akan mengaplikasikan CRUD (Create, Read, Update, Delete) data pada sebuah aplikasi catatan sederhana.



Pada contoh aplikasi catatan sederhana ini, kita hanya akan memiliki satu aktivitas saja yakni MainActivity.java dengan activity_main.xml untuk layout, tentunya supaya tidak merepotkan, dan kita akan banyak menggunakan kodingan "setVisibility" pada objek-objeknya lalu dialog untuk memperlihatkan daftar catatan.



Pertama mari kita mulai dengan terlebih dahulu membuat sebuah Java Class sebagai pembantu penghubung ke SQLite nya. Disini kita namakan dengan DBHelper.java, Class ini memperpanjang class SQLiteOpenHelper. Di dalam class ini hal-hal yang harus ditentukan terlebih dahulu adalah nama dari databasenya, versi databasenya, kemudian nama tabel dan kolom-kolom untuk menempatkan atribut-atribut dari catatan nantinya.

Atribut catatan pada contoh ini hanya 3 saja yakni : id catatan, judul catatan dan konten catatannya. Id digunakan nantinya untuk menyunting dan menghapus catatan. Sebelum lebih lanjut terhadap class DBHelper.java, terlebih dahulu kita perlu membuat sebuah class lagi sebagai metode Setter dan Getter data catatan, yakni yang sudah disebutkan sebelumnya : id, judul, dan catatan. Disini kita berikan nama SetterGetterData.java. Berikut isi dari java class ini :

SetterGetterData.java :
package com.gwnbs.sqlite;

public class SetterGetterData {

private int id;
private String judul;
private String catatan;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getJudul() {
return judul;
}

public void setJudul(String judul) {
this.judul = judul;
}

public String getCatatan() {
return catatan;
}

public void setCatatan(String catatan) {
this.catatan = catatan;
}
}



Kita lanjut pada class DBHelper.java, dalam memasukkan dan memperbaharui data catatan kita akan menggunakan bantuan boolean untuk mengetahui apakah data catatan berhasil disimpan atau tidak. Lalu untuk mendapatkan data dari seluruh catatan pada database, kita menggunakan Cursor untuk mencegah dari memuat semua data kedalam memori, juga tentunya karena data pada catatan berubah-ubah. Terakhir metode menghapus data kita cukup menggunakan void saja.

Untuk metode hapus disini kita buat 2 metode penghapusan yaitu : penghapusan secara satu-persatu dan penghapusan secara keseluruhan. Penghapusan satu persatu adalah melalui id catatan dan penghapusan seluruh data catatan adalah dengan menghapus tabel catatan pada database. Berikut isi selengkapnya dari class ini, disertai sedikit java comment didalamnya.

DBHelper.java :
package com.gwnbs.sqlite;

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

public class DBHelper extends SQLiteOpenHelper {

//Penentuan nama dan versi database
public DBHelper (Context context) {
super(context, "catatan.db", null, 1);
}

//Perintah membuat tabel catatan dan kolom-kolom untuk atribut catatan
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE catatan_table(id INTEGER PRIMARY KEY, judul TEXT, catatan TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS catatan_table");
}

//Memasukkan data catatan ke dalam SQLite database
public boolean masukkanCatatan (SetterGetterData sgd) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("judul", sgd.getJudul());
cv.put("catatan", sgd.getCatatan());
return db.insert("catatan_table", null, cv) > 0;
}

//Mendapatkan seluruh data catatan dari Database
public Cursor dapatkanSemuaCatatan () {
SQLiteDatabase db = getReadableDatabase();
return db.rawQuery("Select * from " + "catatan_table", null);
}

//Memperbaharui catatan
public boolean perbaharuiCatatan(SetterGetterData sgd, int id) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("judul", sgd.getJudul());
cv.put("catatan", sgd.getCatatan());
return db.update("catatan_table", cv, "id" + "=" + id,
null) > 0;
}

//Metode menghapus sebuah catatan
public void hapusCatatan (int id) {
SQLiteDatabase db = getReadableDatabase();
db.delete("catatan_table", "id" + "=" + id, null);
}

//Menghapus seluruh data catatan
public void hapusSemuaCatatan () {
SQLiteDatabase db = getReadableDatabase();
db.delete("catatan_table", null, null);
}

}


Sekarang di activity.main.xml, di dalam layout ini memiliki 7 views dan 4 layouts. 2 komponen Edittext untuk mengisi judul dan konten catatan, Textview sebagai tombol untuk menyimpan catatan, kemudian sebuah tombol pembatalan, dan 2 buah komponen Textview lagi sebagai navigasi untuk membuat catatan baru dan melihat seluruh data catatan. Berikut isinya.

activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<LinearLayout
android:id="@+id/layoutUtama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="20dp"
android:gravity="center"
android:orientation="vertical">

<TextView
android:id="@+id/buatCatatanBaru"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:background="?selectableItemBackground"
android:fontFamily="serif"
android:padding="5dp"
android:text=" Buat Catatan"
android:textColor="@color/hitam"
android:textSize="30sp"
app:drawableStartCompat="@drawable/ic_tambah" />

<TextView
android:id="@+id/daftarCatatan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:fontFamily="serif"
android:padding="5dp"
android:text=" Daftar Catatan"
android:textColor="@color/hitam"
android:textSize="30sp"
app:drawableStartCompat="@drawable/ic_daftar" />


</LinearLayout>

<RelativeLayout
android:id="@+id/layoutCatatan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">

<LinearLayout
android:id="@+id/layoutJudul"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center_vertical"
android:orientation="horizontal">

<View
android:layout_width="4dp"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:background="@color/colorAccent"/>

<EditText
android:id="@+id/judulCatatan"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_weight="1"
android:autofillHints="no"
android:background="@null"
android:fontFamily="serif"
android:gravity="center_vertical"
android:hint="Judul catatan"
android:inputType="textCapWords"
android:padding="5dp"
android:textColor="@color/hitam"
android:textSize="25sp"
android:textStyle="bold"/>

<TextView
android:id="@+id/simpanCatatan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:fontFamily="serif"
android:text="Simpan"
android:textColor="@color/hitam"
android:textSize="12sp"
app:drawableTopCompat="@drawable/ic_simpan" />

</LinearLayout>

<EditText
android:id="@+id/isiCatatan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/layoutJudul"
android:layout_margin="20dp"
android:autofillHints="no"
android:background="@null"
android:fontFamily="serif"
android:gravity="top"
android:hint="Konten catatan"
android:inputType="textMultiLine|textCapSentences"
android:minHeight="250dp"
android:padding="5dp"
android:textColor="@color/hitam"
android:textSize="20sp" />

<Button
android:id="@+id/batal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:fontFamily="serif"
android:text="Batal"
android:textColor="@color/hitam"
android:textSize="25sp"/>

</RelativeLayout>

</RelativeLayout>


Daftar seluruh data catatan akan ditampilkan menggunakan Listview di dalam sebuah dialog dan hanya diperlihatkan judul dari catatan, tombol edit dan hapus catatan. Sehingga kita akan memerlukan layout custom dan sebuah java class sebagai adapter. Layout custom kita namakan item_catatan.xml dan adapter kita namakan AdapterDaftarCatatan.java

Di dalam custom layout tersebut kita memiliki sebuah Textview untuk judul dari catatan, dan 2 buah komponen Imageview sebagai tombol untuk menghapus catatan satu-persatu dan untuk menyunting catatan. Seluruh kodingan java yang diperlukan untuk semua komponen pada layout ini diaplikasikan di dalam file AdapterDaftarCatatan.java. Berikut isi dari kedua file ini.

item_catatan.xml :
<?xml version="1.0" encoding="utf-8"?>
<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:orientation="vertical">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:orientation="horizontal"
android:gravity="center_vertical"
tools:ignore="UselessParent">

<TextView
android:id="@+id/itemJudul"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginEnd="10dp"
android:textSize="22sp"
android:padding="3dp"
android:text="Judul catatan nantinya disini"
android:fontFamily="serif"
android:textColor="@color/hitam"/>

<ImageView
android:id="@+id/editCatatan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="15dp"
android:contentDescription="@string/app_name"
android:src="@drawable/ic_edit" />

<ImageView
android:id="@+id/hapusCatatan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/app_name"
android:src="@drawable/ic_hapus" />

</LinearLayout>

</LinearLayout>


AdapterDaftarCatatan.java:
package com.gwnbs.sqlite;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;

import java.util.List;

public class AdapterDaftarCatatan extends BaseAdapter {

private List<SetterGetterData> sgd;
private Context context;
private int id;
private AlertDialog daftarCatatan;

public AdapterDaftarCatatan(List<SetterGetterData> sgd, Context context, AlertDialog daftarCatatan) {
this.sgd = sgd;
this.context = context;
this.daftarCatatan = daftarCatatan;
}

@Override
public int getCount() {
return sgd.size();
}

@Override
public Object getItem(int position) {
return position;
}

@Override
public long getItemId(int position) {
return 0;
}

@SuppressLint({"ViewHolder", "InflateParams"})
@Override
public View getView(int position, View view, ViewGroup parent) {

LayoutInflater layoutInflater = LayoutInflater.from(context);
view = layoutInflater.inflate(R.layout.item_catatan, null);

TextView itemJudul = view.findViewById(R.id.itemJudul);
ImageView editCatatan = view.findViewById(R.id.editCatatan);
ImageView hapusCatatan = view.findViewById(R.id.hapusCatatan);

final SetterGetterData setterGetterData = sgd.get(position);
itemJudul.setText(setterGetterData.getJudul());

//Metode klik untuk melihat catatan
itemJudul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, MainActivity.class);
i.putExtra("judul", setterGetterData.getJudul());
i.putExtra("catatan", setterGetterData.getCatatan());
i.putExtra("lihat", true);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
daftarCatatan.dismiss();
}
});

//metode klik untuk menyunting catatan, dengan mengirimkan intent ke aktivitas yang sama
//setelah aktivitas di refresh, mode edit catatan aktif.
editCatatan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
id = setterGetterData.getId();
Intent i = new Intent(context, MainActivity.class);
i.putExtra("id", id);
i.putExtra("judul", setterGetterData.getJudul());
i.putExtra("catatan", setterGetterData.getCatatan());
i.putExtra("edit", true);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
daftarCatatan.dismiss();
}
});

//menghapus catatan satu-persatu
hapusCatatan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
id = setterGetterData.getId();
DBHelper dbHelper = new DBHelper(context);
dbHelper.hapusCatatan(id);
notifyDataSetChanged();
dbHelper.close();
Toast.makeText(context, "Catatan dihapus", Toast.LENGTH_SHORT).show();
daftarCatatan.dismiss();
}
});

return view;
}
}



Selanjutnya yang kita butuhkan adalah custom layout untuk dialog yang akan menampilkan daftar seluruh catatan. Layout ini kita berikan nama layout_daftar_catatan.xml. Di dalam layout ini sebuah komponen Listview yang disebutkan diatas sebelumnya disematkan, kemudian sebuah Textview sebagai tombol untuk menghapus seluruh data catatan. Pengaplikasian seluruh koding java untuk layout ini dilakukan di MainActivity.java. Berikut isi dari layout ini :

layout_daftar_catatan.xml :
<?xml version="1.0" encoding="utf-8"?>
<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"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="20dp"
android:background="@color/colorPrimary"
tools:ignore="UselessParent">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="20dp"
android:layout_marginTop="10dp"
android:gravity="center_vertical">

<TextView
android:id="@+id/judulDaftar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="10dp"
android:textSize="27sp"
android:textStyle="bold"
android:textColor="@color/hitam"
android:layout_gravity="center"
android:fontFamily="serif"
android:text="Daftar Catatan" />

<TextView
android:id="@+id/hapusSemuaCatatan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:layout_marginEnd="10dp"
android:textColor="@color/hitam"
android:text="Hapus Semua"
android:textSize="10sp"
app:drawableTopCompat="@drawable/ic_hapus_semua" />

</LinearLayout>

<ListView
android:id="@+id/listDaftar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:layout_margin="10dp"/>

</LinearLayout>

</LinearLayout>


Terakhir pada MainActivity.java. Cukup bayak kodingan yang diaplikasikan pada file ini, di dalamnya saya sematkan java comment pada tiap-tiap metode sebagai sedikit penjelasan. Berikut isi selengkapnya dari file aktivitas ini.

MainActivity.java :
package com.gwnbs.sqlite;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

//Variabel global
private TextView simpanCatatan;
private EditText judulCatatan;
private EditText isiCatatan;
private Button batal;
private boolean edit = false;
private int id = 0;
private RelativeLayout layoutCatatan;
private LinearLayout layoutUtama;

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

//View id dari seluruh komponen pada layout
judulCatatan = findViewById(R.id.judulCatatan);
isiCatatan = findViewById(R.id.isiCatatan);
simpanCatatan = findViewById(R.id.simpanCatatan);
batal = findViewById(R.id.batal);
layoutCatatan = findViewById(R.id.layoutCatatan);
layoutUtama = findViewById(R.id.layoutUtama);

//Local variabel dan view id
TextView buatCatatanBaru = findViewById(R.id.buatCatatanBaru);
TextView daftarCatatan = findViewById(R.id.daftarCatatan);

//Menerima intent yang dikirimkan oleh tombol edit catatan.
//jika nilai boolean edit adalah true maka mode sunting catatan aktif.
Intent i = getIntent();
edit = i.getBooleanExtra("edit", false);
if (edit) {
layoutUtama.setVisibility(View.GONE);
layoutCatatan.setVisibility(View.VISIBLE);
}

//Mode untuk melihat catatan
//Aktif saat judul catatan pada daftar catatan di klik.
boolean lihat = i.getBooleanExtra("lihat", false);
if (lihat) {
simpanCatatan.setVisibility(View.INVISIBLE);
batal.setText("Kembali");
layoutUtama.setVisibility(View.GONE);
layoutCatatan.setVisibility(View.VISIBLE);
}
judulCatatan.setText(i.getStringExtra("judul"));
isiCatatan.setText(i.getStringExtra("catatan"));
id = i.getIntExtra("id", 0);

//Metode klik untuk tombol membuat catatan baru
buatCatatanBaru.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
simpanCatatan.setVisibility(View.VISIBLE);
batal.setVisibility(View.VISIBLE);
batal.setText("Batal");
layoutUtama.setVisibility(View.GONE);
layoutCatatan.setVisibility(View.VISIBLE);
}
});

//Metode klik untuk tombol menyimpan catatan
simpanCatatan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (judulCatatan.getText().toString().isEmpty()) {
Toast.makeText(getApplicationContext(), "Judul tidak boleh kosong", Toast.LENGTH_SHORT).show();
return;
}
if (isiCatatan.getText().toString().isEmpty()) {
Toast.makeText(getApplicationContext(), "Konten catatan tidak boleh kosong", Toast.LENGTH_SHORT).show();
return;
}

DBHelper dbHelper = new DBHelper(getApplicationContext());
SetterGetterData sgd = new SetterGetterData();
sgd.setJudul(judulCatatan.getText().toString());
sgd.setCatatan(isiCatatan.getText().toString());

boolean masukkanCatatan;
if (edit) {
masukkanCatatan = dbHelper.perbaharuiCatatan(sgd, id);
} else {
masukkanCatatan = dbHelper.masukkanCatatan(sgd);
}
if (masukkanCatatan) {
Toast.makeText(getApplicationContext(), "Catatan berhasil disimpan", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Kesalahan terjadi!", Toast.LENGTH_SHORT).show();
}
dbHelper.close();

judulCatatan.getText().clear();
isiCatatan.getText().clear();
layoutUtama.setVisibility(View.VISIBLE);
layoutCatatan.setVisibility(View.GONE);
}
});

//Metode klik untuk tombol melihat daftar catatan
daftarCatatan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialogDaftarCatatan();
}
});

//Metode klik untuk tombol membatalkan pembuatan atau penyuntingan catatan
batal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
judulCatatan.getText().clear();
isiCatatan.getText().clear();
layoutUtama.setVisibility(View.VISIBLE);
layoutCatatan.setVisibility(View.GONE);
edit = false;
}
});
}

//Dialog untuk menampilkan daftar catatan
@SuppressLint("SetTextI18n")
private void dialogDaftarCatatan () {
AlertDialog.Builder b = new AlertDialog.Builder(this);
LayoutInflater inflater = LayoutInflater.from(this);
View v = inflater.inflate(R.layout.layout_daftar_catatan, null);
TextView hapusSemuaCatatan = v.findViewById(R.id.hapusSemuaCatatan);
TextView judulDaftar = v.findViewById(R.id.judulDaftar);
b.setView(v);

ArrayList<SetterGetterData> setterGetterData = new ArrayList<>();
ListView listDaftar = v.findViewById(R.id.listDaftar);
final DBHelper dh = new DBHelper(getApplicationContext());
Cursor cursor = dh.dapatkanSemuaCatatan();
cursor.moveToFirst();
if (cursor.getCount() > 0) {
while (!cursor.isAfterLast()) {
SetterGetterData sgd = new SetterGetterData();
sgd.setId((cursor.getInt(cursor.getColumnIndexOrThrow("id"))));
sgd.setJudul((cursor.getString(cursor.getColumnIndexOrThrow("judul"))));
sgd.setCatatan((cursor.getString(cursor.getColumnIndexOrThrow("catatan"))));
setterGetterData.add(sgd);
cursor.moveToNext();
}
dh.close();
}

final AlertDialog daftarCatatan = b.create();if (daftarCatatan.getWindow() !=null) {
daftarCatatan.getWindow().setBackgroundDrawable(new ColorDrawable(0));
}
AdapterDaftarCatatan adapterDaftarCatatan = new AdapterDaftarCatatan(setterGetterData, getApplicationContext(),
daftarCatatan);
listDaftar.setAdapter(adapterDaftarCatatan);

if (listDaftar.getAdapter().getCount() < 2) {
hapusSemuaCatatan.setVisibility(View.INVISIBLE);
} else {
hapusSemuaCatatan.setVisibility(View.VISIBLE);
}

if (listDaftar.getAdapter().getCount() < 1) {
judulDaftar.setText("Kosong");
} else {
judulDaftar.setText("Daftar Catatan");
}

//Menghapus seluruh catatan
hapusSemuaCatatan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dh.hapusSemuaCatatan();
dh.close();
daftarCatatan.dismiss();
Toast.makeText(getApplicationContext(), "Seluruh catatan dihapus", Toast.LENGTH_SHORT).show();
}
});

daftarCatatan.show();
}

public void onBackPressed () {
if (layoutCatatan.getVisibility() == View.VISIBLE) {
layoutCatatan.setVisibility(View.GONE);
layoutUtama.setVisibility(View.VISIBLE);
} else {
finishAffinity();
}
}
}



Dan berikut screenshoot dari project ini, yang memperlihatkan folder-folder dan file-file yang digunakan pada tutorial ini.

Conntoh menggunakan SQLite Database di Android
Gambar 1 : Folder-folder dan file-file yang digunakan.


Untuk icon drawable yang digunakan dalam tutorial ini jumlah seluruhnya ada 6. Dapat dibuat melalui vector asset pada Android Studio. Pun begitu, berikut saya sertakan seluruhnya.

ic_daftar.xml :
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="30dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M4,14h4v-4L4,10v4zM4,19h4v-4L4,15v4zM4,9h4L8,5L4,5v4zM9,14h12v-4L9,10v4zM9,19h12v-4L9,15v4zM9,5v4h12L21,5L9,5z" />
</vector>


ic_edit.xml :
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="@color/hitam"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z" />
</vector>


ic_hapus.xml :
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="@color/hitam"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2L18,7L6,7v12zM8,9h8v10L8,19L8,9zM15.5,4l-1,-1h-5l-1,1L5,4v2h14L19,4z" />
</vector>


ic_hapus_semua.xml :
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="30dp"
android:tint="#CC0000"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z" />
</vector>


ic_simpan.xml :
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="30dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM15,9L5,9L5,5h10v4z" />
</vector>


ic_tambah.xml :
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="30dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
</vector>


Kemudian dibawah ini isi dari file-file value, yakni : colors.xml, strings.xml dan styles.xml.

colors.xml :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#F57C00</color>
<color name="colorPrimaryDark">#93452D</color>
<color name="colorAccent">#AFB42B</color>
<color name="hitam">#272424</color>
</resources>


strings.xml :
<resources>
<string name="app_name">SQ Lite</string>
</resources>


styles.xml :
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

</resources>


Sekian tutorial ini, semoga bermanfaat. Terima kasih sudah meluangkan waktu untuk berkunjung, jika ada yang ingin ditanyakan silahkan diposting di kolom komentar.
Share:

0 comments:

Post a Comment

Hubungi Saya

Name

Email *

Message *

Terlaris 30 Hari Terakhir