Bismillah
Pada kesempatan kali ini aku akan membuat aplikasi berbasis CRUD menggunakan database REALM, sebelum membuat projek kita harus tahu apa itu realm.
realm sendiri adalah jenis database yang secara langsung akan menyimpan data ke dalam storage device. Realm adalah pengganti sejenis database store mirip sqllite. Dari segi kecepatan dibanding database ORM lainnya realm lebih unggul.
Implementasi ke dalam project
- LAYOUT
1. conten_main tambahkan ListView
<ListView android:id="@+id/lv" android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView>
2. buat layout xml baru dengan nama edit_mahasiswa, kemudian pada layoutnya tambahkan beberapa komponen EditText, dan Button
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorPrimary"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-condensed" android:gravity="center" android:text="TAMBAH MAHASISWA" android:textColor="#fff" /> <EditText android:id="@+id/ednama" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:hint="Nama" android:textColor="#fff" android:textColorHint="#fff" /> <EditText android:id="@+id/edalamat" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:hint="Alamat" android:textColor="#fff" android:textColorHint="#fff" /> <Button android:id="@+id/btnEdit" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:text="Edit" /> <Button android:id="@+id/btnHapus" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:text="Hapus" /> </LinearLayout> </RelativeLayout>
4. Selanjutnya untuk layout insert_mahasiswa
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorAccent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-condensed" android:gravity="center" android:text="TAMBAH MAHASISWA" android:textColor="#fff" /> <EditText android:id="@+id/txtnama" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:hint="Nama" android:textColor="#fff" android:textColorHint="#fff" /> <EditText android:id="@+id/txtalamat" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:hint="Alamat" android:textColor="#fff" android:textColorHint="#fff" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btnCari" android:text="Cari Alamat"/> <Button android:id="@+id/btnTambah" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:text="Tambah" /> </LinearLayout> </RelativeLayout>
5. Buat xml layout untuk membuat menampilkan isi dari lisview dengan cara menambahaan xml seperti berikut
<?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:orientation="vertical"> <TextView android:id="@+id/txttnama" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Aji" /> <TextView android:id="@+id/txttalamat" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Kendal" /> </LinearLayout>
1. Buat sebuah project android studio, kemudin saat memilih activity pastikan untuk memilih basic activity, karena kita akan menggunakan fitur bawaan dari actvity tersesbut, yakni menggunakan floating acation button
2. Menambahkan dependency
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.1' compile 'com.android.support:design:24.2.1' //untuk library realm compile 'io.realm:realm-android:0.87.2' //untuk library maps compile 'com.google.android.gms:play-services-maps:9.6.0' compile 'com.google.android.gms:play-services:9.6.0' compile 'com.android.support:support-v4:25.2.0' testCompile 'junit:junit:4.12' } apply plugin: 'com.google.gms.google-services'
3. Kemudian buat class BaseApp, untuk menbuat konfigurasi default dengan mengextend ke Application
4. Pada manifest tambahkanpackage imastudio.realm; /** * Created by Taufiq */public class MahasiswaModel { int idMahasiswa; String namaMahasiswa, alamatMahasiswa; public int getIdMahasiswa() { return idMahasiswa; } public void setIdMahasiswa(int idMahasiswa) { this.idMahasiswa = idMahasiswa; } public String getNamaMahasiswa() { return namaMahasiswa; } public void setNamaMahasiswa(String namaMahasiswa) { this.namaMahasiswa = namaMahasiswa; } public String getAlamatMahasiswa() { return alamatMahasiswa; } public void setAlamatMahasiswa(String alamatMahasiswa) { this.alamatMahasiswa = alamatMahasiswa; } /*konstruktor unutk berinteraksi dengan class ini serta menambahkan data ke dalam class ini*/ public MahasiswaModel(int idMahasiswa, String namaMahasiswa, String alamatMahasiswa) { this.idMahasiswa = idMahasiswa; this.namaMahasiswa = namaMahasiswa; this.alamatMahasiswa = alamatMahasiswa; } }
<application android:name=".BaseApp" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true"
android:theme="@style/AppTheme">5. Membuat kelas MahasiswaModel, fungsinya unutk melempar dan menagkan paramenter dari masing-masing data yang di store
6. Buat kelas mahasiswapublic class MahasiswaModel { int idMahasiswa; String namaMahasiswa, alamatMahasiswa; public int getIdMahasiswa() { return idMahasiswa; } public void setIdMahasiswa(int idMahasiswa) { this.idMahasiswa = idMahasiswa; } public String getNamaMahasiswa() { return namaMahasiswa; } public void setNamaMahasiswa(String namaMahasiswa) { this.namaMahasiswa = namaMahasiswa; } public String getAlamatMahasiswa() { return alamatMahasiswa; } public void setAlamatMahasiswa(String alamatMahasiswa) { this.alamatMahasiswa = alamatMahasiswa; } /*konstruktor unutk berinteraksi dengan class ini serta menambahkan data ke dalam class ini*/ public MahasiswaModel(int idMahasiswa, String namaMahasiswa, String alamatMahasiswa) { this.idMahasiswa = idMahasiswa; this.namaMahasiswa = namaMahasiswa; this.alamatMahasiswa = alamatMahasiswa; } }
import io.realm.Realm; import io.realm.RealmObject; import io.realm.annotations.PrimaryKey; /** * Created by Taufiq */public class Mahasiswa extends RealmObject { @PrimaryKey private int idMahasiswa; private String namaMahasiswa, alamatMahasiswa; public int getIdMahasiswa() { return idMahasiswa; } public void setIdMahasiswa(int idMahasiswa) { this.idMahasiswa = idMahasiswa; } public String getNamaMahasiswa() { return namaMahasiswa; } public void setNamaMahasiswa(String namaMahasiswa) { this.namaMahasiswa = namaMahasiswa; } public String getAlamatMahasiswa() { return alamatMahasiswa; } public void setAlamatMahasiswa(String alamatMahasiswa) { this.alamatMahasiswa = alamatMahasiswa; } }
Disini menggunakan anotasi @PrimaryKey untuk mendeklarasikan id sebagai primary key.
@PrimaryKey
private int id;
private int id;
Realm mendukung anotasi sebagai berikut :
@Required : Memberlakukan pemeriksaan untuk tidak membolehkan nilai null.
@Ignore : Kolom tidak harus disimpan.
@Index : Menambahkan index pencarian pada kolom.
@PrimaryKey : Identifikasi unik pada tiap data pada database. tetapi tidak menyediakan auto-increment
7, Kemudian pada MainActivity tambahkan variable inisialaisasi
/*variable pada objek*/RealmHelper realmHelper; ListView lv; private ArrayList<MahasiswaModel> data; private RealmHelper helper;
- inisialisasi pada oncreate
realmHelper = new RealmHelper(MainActivity.this); /*deklarasikan widaget listview*/lv = (ListView) findViewById(R.id.lv); data = new ArrayList<>();
getData();
- kemudian pada floatingaction kita custom agar saat di klik dari floating action maka akan pindah halaman ke add mahasiswa
final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this,InasertMahasiswa.class)); } });
- full code dari MainActivity.java akan seperti ini
package imastudio.realm; import android.app.Dialog; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; import com.google.android.gms.ads.MobileAds; import org.w3c.dom.Text; import java.util.ArrayList; import static imastudio.realm.R.id.fab; import static imastudio.realm.R.id.txtalamat; import static imastudio.realm.R.id.txtnama; public class MainActivity extends AppCompatActivity { /*variable pada objek*/ RealmHelper realmHelper; ListView lv; private ArrayList<MahasiswaModel> data; private RealmHelper helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); Toast.makeText(MainActivity.this, String.valueOf(System.currentTimeMillis()), Toast.LENGTH_LONG).show(); /*perkenalkan class RealmHelper pada class ini*/ realmHelper = new RealmHelper(MainActivity.this); /*deklarasikan widaget listview*/ lv = (ListView) findViewById(R.id.lv); data = new ArrayList<>(); /*menmpilkan data saat activity muncul*/ getData(); /*event pada FAB*/ final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this,InasertMahasiswa.class)); } }); lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { return false; } }); /*event ketika listview diklik*/ lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) { /*model mahasiswa diambil dengan variable d sesuai posisi*/ final MahasiswaModel d = data.get(i); /*menampilkan dialog*/ /*perkenalkan diaog ke dalam actiity ini*/ final Dialog dialog = new Dialog(MainActivity.this); dialog.setContentView(R.layout.edit_mahasiswa); /*deskripsikan widget*/ final EditText edalamat = (EditText) dialog.findViewById(R.id.edalamat); final EditText ednama = (EditText) dialog.findViewById(R.id.ednama); Button btntambah = (Button) dialog.findViewById(R.id.btnEdit); Button btnhapus = (Button) dialog.findViewById(R.id.btnHapus); /*menampilkan data ke dalam EditText*/ ednama.setText(d.getNamaMahasiswa()); edalamat.setText(d.getAlamatMahasiswa()); /*event pada tombol hapus*/ btnhapus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { realmHelper.deleteData(d.idMahasiswa); dialog.dismiss(); getData(); } }); /*event pada tombol edit*/ btntambah.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String nama = ednama.getText().toString(); String alamat = edalamat.getText().toString(); realmHelper.updateData(d.idMahasiswa, nama, alamat); dialog.dismiss(); getData(); } }); dialog.show(); } }); } /*method mengambil data*/ private void getData() { try { data = realmHelper.findAll(); } catch (Exception e) { } /*memasukan data ke dalam ListVuiew*/ try { CustomAdapter adapter = new CustomAdapter(this, data); lv.setAdapter(adapter); } catch (NullPointerException e) { } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.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(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override protected void onRestart() { super.onRestart(); getData(); } }
- Kemudain pada InsertMahasiswa.xml tambahkan kode berikut . silahkan di lihat di pada komentar kode untuk mengtahui fungsinya. disini kita juga menambahkan sebuah maps utnuk mengambil lokasinya .
package imastudio.realm; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import com.google.android.gms.common.GooglePlayServicesNotAvailableException; import com.google.android.gms.common.GooglePlayServicesRepairableException; import com.google.android.gms.location.places.Place; import com.google.android.gms.location.places.ui.PlacePicker; /** * Created by Taufiq on 5/29/2017. */ public class InasertMahasiswa extends AppCompatActivity { RealmHelper realmHelper; private static final int PLACE_PICKER_REQUEST =101 ; EditText edNama,edAlamat; Button btAlamat, btInput; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.insert_mahasiswa); realmHelper = new RealmHelper(InasertMahasiswa.this); setView(); btAlamat.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // membuat Intent untuk Place Picker // membuat Intent untuk Place Picker PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); try { //menjalankan place picker startActivityForResult(builder.build(InasertMahasiswa.this), PLACE_PICKER_REQUEST); } catch (GooglePlayServicesRepairableException e) { e.printStackTrace(); } catch (GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } } }); btInput.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /*simpan data dengan memenggil method addMahasiswa*/ String nama = edNama.getText().toString(); String alamat = edAlamat.getText().toString(); realmHelper.addMahasiswa(nama, alamat); Intent a = new Intent(InasertMahasiswa.this,MainActivity.class); startActivity(a); } }); } private void setView() { edAlamat =(EditText)findViewById(R.id.txtalamat); edNama =(EditText)findViewById(R.id.txtnama); btAlamat =(Button)findViewById(R.id.btnCari); btInput =(Button)findViewById(R.id.btnTambah); } // code untuk membuat maps picker @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // menangkap hasil balikan dari Place Picker, dan menampilkannya pada TextView if (requestCode == PLACE_PICKER_REQUEST) { if (resultCode == RESULT_OK) { Place place = PlacePicker.getPlace(data, this); String toastMsg = String.format( "Place: %s \n" + "Alamat: %s \n" + "Latlng %s \n", place.getName(), place.getAddress(), place.getLatLng().latitude + " " + place.getLatLng().longitude); edAlamat.setText(toastMsg); } } }
}
Oke saya kira cukup sekian ..
untuk source codenya nya bagi mau bisa request ke Email saya
taufiqhidayaht@gmail.com
Terima kasih telah membaca artikel 'Realm Example with Maps Picker' Semoga bermanfaat.
0 komentar:
Berkomentarlah dengan baik dan bijak..