This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

Sabtu, 11 November 2017

Membuat CRUD dengan Spring Java


Assalamu'alaykum Warahmatullahi Wabarakatuh.

Spring merupakan sebuah framework (kerangka kerja) yang digunakan untuk membangun sebuah aplikasi Enterprise. Spring termasuk framework yang lightweight (ringan) untuk mendukung secara penuh dalam pengembangan aplikasi Enterprise siap pakai.
Spring dapat digunakan untuk melakukan pengaturan deklarasi manajemen transaksi, remote access dengan menggunakan RMI atau layanan web lainnya, fasilitas mailing, dan beragam opsi untuk pengaturan data ke database. Spring juga memungkinkan kita menggunakan hanya modul-modul tertentu sehingga kita tidak usah menggunakan semua modul spring dalam aplikasi apabila tidak diperlukan.
Fitur-fitur dari Spring Framework :
  1. Transaction Management : Spring framework menyediakan sebuah layer abstrak yang generik untuk manajemen transaksi, sehingga memudahkan para developer dalam melakukan manajemen transaksi.
  2. JDBC Exception Handling : layer abstrak JDBC menawarkan exception yang bersifat hierarki sehingga memudahkan penanganan error.
  3. Integration with Hibernate, JDO, and iBatis : Spring menawarkan layanan integrasi terbaik dengan Hibernate, JDO dan iBatas
  4. AOP Framework : Spring merupakan framework AOP Terbaik yang pernah ada.
  5. MVC Framework : Spring hadir dengan framework aplikasi web MVC, yang dibangun di atas inti Spring. Spring merupakan framework yang sangat fleksibel dalam pengaturan strategi interface, dan mengakomodasi beberapa teknologi view seperti JSP, Velocity, Tiles, iText, dan POI.
Arsitektur Spring :
  1. Spring AOP
    Salah satu komponen utama Spring adalah AOP Framework, AOP framework digunakan untuk :
    • Untuk menyediakan layanan Enterprise, terutama sebagai pengganti EJB. Layanan terpenting dalam layanan ini adalah untuk mendekralitf manajemen transaksi, yang telah disediakan dalam abstraksi spring transaction.
    • Untuk memungkinkan pengguna dalam menerapkan AOP dalam penggunaan OOP.
  2. Spring ORM
    Spring ORM berhubungan dengan akses database dan menyediakan lapisan layer terintegrasi dengan ORM yang populer termasuk JDO, Hibernate dan iBatis.
  3. Spring Web
    Merupakan bagian dari modul pengembangan Web Spring termasuk Spring Web MVC.
  4. Spring DAO
    DAO (Data Access Object) mendukung standarisasi akses data yang menggunakan teknologi seperti JDBC, Hibernate dan JDO.
  5. Spring Context
    Paket ini didasari pada paket beans untuk menambah dukungan sumber pesan dan untuk pola desain Observer, dan kemampuan untuk mendapatkan sumber daya yang konsisten dengan menggunakan API.
  6. Spring Web MVC
    Menyediakan implementasi MVC untuk aplikasi web.
  7. Spring Core
    Paket Spring Core ini merupakan komponen paling penting dari Spring Framework.
    Komponen ini menyediakan fitur Dependency Injection. BeanFactory memisahkan dependensi seperti inisialisasi, pembentukan dan akses object dari logika program anda.
Langsung saja, saya akan menjelaskan cara-cara membuat CRUD menggunakan Spring Java :

1. Tulislah di alamat URL anda "start.spring.io" untuk membuat project aplikasi. Karena project saya laboratorium maka saya menulis laboratorium di Artifact saya. Ketik Web, JPA dan MySQL di Search Dependencies. Pilih versi 1.4.7. -> klik Generate Project.



2. Di folder Downloads compress file laboratorium -> Cut -> Paste di folder mana saja.




3. Akfifkan Apache dan Mysql di Xampp Controlpanel.


4. Buka aplikasi NetBeans -> File -> New Project -> Java Application -> Next -> Beri nama project anda. Kalau project saya "laboratorium".



5. Jika belum ada file m2 silahkan download terlebih dahulu -> copy -> paste.


6. Di folder Source Package buatlah packgae-package seperti yang ada dibawah ini.

7. Pada package com.rafqa.laboratorium.entity buat kelas Karyawan dan Pelanggan.




Srcipt Karyawan.java

package com.rafqa.laboratorium.entity;

import javax.persistence.*;
import org.hibernate.annotations.CollectionId;
import org.hibernate.annotations.GenericGenerator;

/**
 *
 * @author rafqa
 */

@Entity
@Table (name = "tbl_Karyawan")
public class Karyawan {
    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid",strategy = "uuid2")
    private String id;
    @Column( nullable = false, length = 20)
    private String nama;

    public String getId() {
        return id;
    }

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

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

}

Script Pelanggan.java

package com.rafqa.laboratorium.entity;

import javax.persistence.*;
import org.hibernate.annotations.CollectionId;
import org.hibernate.annotations.GenericGenerator;

/**
 *
 * @author rafqa
 */
@Entity
@Table (name = "tbl_Pelanggan")
public class Pelanggan {
     @Id
     @GeneratedValue(generator = "uuid")
     @GenericGenerator(name = "uuid",strategy = "uuid2")
     private String id;
     @Column(nullable = false, length = 20)
     private String nama;
     @Column (nullable = false, length = 20)
     private String alamat;

    public String getId() {
        return id;
    }

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

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public String getAlamat() {
        return alamat;
    }

    public void setAlamat(String alamat) {
        this.alamat = alamat;
    }
 
}

8. Di package com.rafqa.laboratorium.dao -> klik kanan -> interfaces -> KaryawanDao dan buat juga langkah yang sama pada PelanggamDao.



KaryawanDao.java

package com.rafqa.laboratorium.dao;

import com.rafqa.laboratorium.entity.Karyawan;
import java.io.Serializable;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 *
 * @author rafqa
 */

public interface KaryawanDao extends PagingAndSortingRepository<Karyawan, String>{

}

PelangganDao.java

package com.rafqa.laboratorium.dao;

import com.rafqa.laboratorium.entity.Pelanggan;
import java.io.Serializable;
import org.springframework.data.repository.PagingAndSortingRepository;

/**
 *
 * @author rafqa
 */
public interface PelangganDao extends PagingAndSortingRepository<Pelanggan, String>{
    
}

9. Buat class PelangganHTMLController pada package com.rafqa.laboratorium.controller.



package com.rafqa.laboratorium.controller;

import java.sql.Date;
import java.text.SimpleDateFormat;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.rafqa.laboratorium.dao.PelangganDao;
import com.rafqa.laboratorium.entity.Pelanggan;


/**
 *
 * @author rafqa
 */
@Controller
@RequestMapping("/pelanggan")
public class PelangganHtmlController {
    
    @Autowired
    private PelangganDao pd;
    
    @RequestMapping("/list")
    public void daftarPelanggan(Model m) {
        m.addAttribute("daftarPelanggan", pd.findAll());
    }
    
    @RequestMapping("/hapus")
    public String hapus(@RequestParam("id") String id) {
        pd.delete(id);
        return "redirect:list";
    }
    
    @RequestMapping(value = "/form", method = RequestMethod.POST)
    public String form(@Valid Pelanggan p,
            BindingResult errors) {
        if (errors.hasErrors()) {
            return "/pelanggan/form";
        }
        pd.save(p);
        return "redirect:list";
    }
    

    
    @RequestMapping(value = "/form", method = RequestMethod.GET)
    public String form(@RequestParam(value = "id",
            required = false) String id, Model m) {
        m.addAttribute("pelanggan", new Pelanggan());
        if (id != null && !id.isEmpty()) {
            Pelanggan p = pd.findOne(id);
            if (p != null) {
                m.addAttribute("pelanggan", p);
            }
        }
        return "/pelanggan/form";
    }
}

10. Buat kelas LaboratoriumApplication pada package com.rafqa.laboratorium.



package com.rafqa.laboratorium;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LaboratoriumApplication {

public static void main(String[] args) {
SpringApplication.run(LaboratoriumApplication.class, args);
}
}

11. 


package com.rafqa.laboratorium;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration (classes = LaboratoriumApplication.class)
public class LaboratoriumApplicationTests {

@Test
public void contextLoads() {
}

}

12. Di folder Other Sources klik src/main/resources -> klik <default packages> di application properties buat database aplikasi laboratorium.

spring.datasource.url=jdbc:mysql://localhost/db_laboratorium
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver


spring.jpa.generate-ddl=true



13. Klik folder Project Files -> klik pom.xml -> ubah versi spring seperti gambar dibawah ini.



14. Buat database db_laboratorium -> compile aplikasinya -> run 


15. Maka tabel-tabel dari database laboratorium akan terisi sendiri.



16. Ketikkan localhost:8080/pelanggan/list


17. Tambah Data Pelanggan maka akan muncul form isi data seperti gambar dibawah ini.


18. Di aksi klik hapus -> muncul kotak dialog "apakah anda yakin ingin menghapus data ini"?


20. Maka data akan terhapus.

Selasa, 07 November 2017

Membuat Aplikasi Client Server menggunakan Android, PHP dan MySQL


Posting kali ini, kita mencoba membuat aplikasi client server berbasis Android dan menghubungkan dengan database MySQL. Client-server ? Ya…. Kita akan membuat aplikasi Android yang datanya akan disimpan pada sebuah server. Bisa local (localhost) atau di internet.
Mengapa kita harus menympan data di database,  bukankah di Android memiliki database untuk menyimpan data ?. Sebenarnya Android memiliki fasilitas untuk menyimpan data yaitu:
  1. Shared preferences. Terdiri dari key dan value data. Model ini biasanya untuk menyimpan settingan (pengaturan) sebuah aplikasi.
  2. File. Fasilitas ini juga dapat menyimpan data sama halnya dengan Shared Preferences, hanya saja data disimpan ke dalam bentuk file. Misalnya: txt, xml atau bentuk file lainnya
  3. SQLite Database. Fasilitas ini cukup idel untuk menyimpan data yang lumayan banyak. Berbeda halnya dengan no 1 dan 2 di atas yang biasanya untuk menyimpan data yang sedikit seperti pengaturan. Dengan SQLite, kita dapat melakukan query dan table-table  seperti halnya database pada umumnya.
Untuk mempelajari ketiga fasilitas di atas, silakan klik  http://developer.android.com/training/basics/data-storage/index.html.
Ketiga fasilitas di atas menyimpan data pada ponsel pengguna (client). Nah, bagaimana jika ingin data itu selalu update dan dapat mengaksesnya siapa saja dan dimana saja (anyone, anytime and anywhere)?. Itulah alasanya mengapa kita memerlukan sebuah server dalam hal ini MySQL.
Aplikasi yang akan kita bangun tergambar seperti berikut:

  1. Membuat Database
  2. Membuat script PHP
  3. Membuat aplikasi Android
OK….. langsung saja
1. Membuat database MySQL
Database: latihan_android
Table: mahasiswa (id, nim, nama, telp, alamat)
create database latihan_android;
use latihan_android;
CREATE TABLE IF NOT EXISTS `mahasiswa` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `nim` varchar(11) NOT NULL,
 `nama` varchar(100) NOT NULL,
 `telp` varchar(50) NOT NULL,
 `alamat` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;
--
-- Dumping data for table `mahasiswa`
--
INSERT INTO `mahasiswa` ( `nim`, `nama`, `telp`, `alamat`) VALUES
( '2222', 'aaaa', '0801', 'Alamat 1'),
( '1111', 'bbbb', '0802', 'Alamat 2'),
( '2222', 'cccc', '0803', 'Alamat 3'),
( '3333', 'dddd', '0804', 'Alamat 4'),
( '1111', 'eeee', '0805', 'Alamat 5'),
( '2222', 'ffff', '0806', 'Alamat 6'),
( '3333', 'gggg', '0807', 'Alamat 7'),
( '4444', 'hhhh', '0808', 'Alamat 8'),
( '5555', 'iiii', '0809', 'Alamat 9');


2. Membuat script PHP
Database sudah selesai, selanjutnya adalah membuat script server side. Koq kita butuh script server side, Kita kan belajar Android (Java) ? … Sebenarnya Android tidak dapat berkomunikasi langsung dengan MySQL untuk memanipulasi database. Untuk itu, kita membutuhkan script server side misalnya ASP, JSP atau PHP untuk bisa menjadi “jembatan” antara Android dengan MySQL. Jadi, Android hanya memberika perintah (request) ke PHP dan PHP lah yang akan melaksanakan query ke MySQL.
Pada posting ini, kita membuat 5 (lima) file PHP.
1. index.php : sebagai file index dan hanya berisi HTML
2. connection.php: sebagai file koneksi ke database
3. select_all.php: untuk melakukan query select all, mengabil seluruh data dari table Mahasiswa
4. submit_mahasiswa.php : untuk memproses simpan dan update
5. delete_mahasiswa.php: untuk menghapus (delete) data mahasiswa
Semua file di atas diletakkan dalam direktori “android”. c:/xampp/htdocs/android. (sesuaikan dengan direktori server Anda).
index.php
<html>
<head>
 <title>Index Android</title>
</head>
<body>
 <h3>Index Android</h3>
</body>
</html>

connection.php

<?php
/*silakan sesuaikan dengan konfigurasi server Anda*/
$conn = mysql_connect('localhost', 'root', 'xxxxx') or die(mysql_error());
$db = mysql_select_db('latihan_android') or die(mysql_error());
?>

select_all.php

<?php
/*reply data dalam JSON */
include('connection.php');
$query = 'select * from mahasiswa';
$result = mysql_query($query) or die(mysql_error());
$data = array();
while($row = mysql_fetch_object($result)){
   $data['mahasiswa'][]= $row;
}
echo json_encode($data);
?>


submit_mahasiswa.php

<?php
/**jika id = 0,maka akan dilakukan insert, jika tidak update berdasarkan id */
include('connection.php');
$id = (int)$_POST['id'];
$nim = $_POST['nim'];
$nama = $_POST['nama'];
$telp = $_POST['telp'];
$alamat = $_POST['alamat'];
$query = 'insert into mahasiswa (nim, nama, telp, alamat) values ("'.$nim.'", "'.$nama.'", "'.$telp.'", "'.$alamat.'")';
if($id > 0){
   $query = 'update mahasiswa set nama = "'.$nama.'", nim = "'.$nim.'", telp = "'.$telp.'", alamat = "'.$alamat.'" where id = '.$id;
}
mysql_query($query) or die(mysql_error());
?>

delete_mahasiswa.php


<?php
/**menghapus mahasiswa berdasarkan id*/
include('connection.php');
$id = (int)$_GET['id'];
$query = 'delete from mahasiswa where id = '.$id;
$result = mysql_query($query) or die(mysql_error());
if(mysql_affected_rows() > 0){
    echo 'deleted id = '.$id;
}else{
    echo 'NOT founnd id = '.$id;
}
?>


Script PHP sudah selesai dan selanjutnya membuat aplikasi inti yaitu Android. Ada baiknya, sebelum membuat aplikasi android, kita test dulu apakah script PHP sudah bisa diakses dari emulator.
Caranya mudah, cukup buka browser dari emulator (AVD), dan bukalah urlhttp://10.0.2.2/android/index.php
10.0.2.2 adalah host default untuk mengakses server local.

Jika direktori dan file nya benar, server aktif dan MySQL aktif, maka tampilannya seperti gambar di atas, berari emulator sudah dapat mengakses localhost dan kita siap untuk membuat aplikasi Android.

3. Membuat aplikasi Android
Buatlah project Android seperti gambar berikut:

create
create

Pada project ini, kita membuat aplikasi dengan Min Requirement SDK adalah API 11 (Honeycomb) . Karena di aplikasi ini memiliki Action Bar (Action Bar hanya tersedia pada API 11 ke atas).
Secara default, Eclipse akan membuat 1 Activity dan 1 layout (MainActivity.java dan activity_main.xml).
a. Membuat object Mahasiswa
Yang pertama kita lakukan adalah membuat object Mahasiswa. Yha…. Mahasiswa, karena table yang dibuat sebelumnya adalah mahasiswa. Class Mahasiswa sangat membantu kita memanipulasi object. Salah satunya adalah konsep Object Relational Mapping (ORM) yang menggunakan object yang sama untuk memetakan table pada database.
Mahasiswa.java
package org.pizaini.mahasiswaonline.entities;
public class Mahasiswa {
 private Integer id;
 private String nim;
 private String nama;
 private String telp;
 private String alamat;
 public Mahasiswa() {
 super();
 }
public Mahasiswa(Integer id, String nim, String nama, String telp,
 String alamat) {
 super();
 this.id = id;
 this.nim = nim;
 this.nama = nama;
 this.telp = telp;
 this.alamat = alamat;
 }
public Integer getId() {
 return id;
 }
public void setId(Integer id) {
 this.id = id;
 }
public String getNim() {
 return nim;
 }
public void setNim(String nim) {
 this.nim = nim;
 }
public String getNama() {
 return nama;
 }
public void setNama(String nama) {
 this.nama = nama;
 }
public String getTelp() {
 return telp;
 }
public void setTelp(String telp) {
 this.telp = telp;
 }
public String getAlamat() {
 return alamat;
 }
public void setAlamat(String alamat) {
 this.alamat = alamat;
 }
}


b. Membuat class ServerRequest
Class ini akan kita gunakan berkomunikasi / melakukan request ke server. Pada class ini, kita membuat dua buah request, yaitu GET dan POST.
ServerRequest.java
package org.pizaini.mahasiswaonline.server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.pizaini.mahasiswaonline.entities.Mahasiswa;
import android.util.Log;
public class ServerRequest {
 private final static String TAG = "ServerRequest";
 private final String serverUri = "http://10.0.2.2/android";
 public static final String urlSelectAll = "select_all.php";
 public static final String urlDelete = "delete_mahasiswa.php";
 public static final String urlSubmit = "submit_mahasiswa.php";
 public ServerRequest() {
super();
 }
/** Mengirimkan GET request */
public String sendGetRequest(String reqUrl){
 HttpClient httpClient;
 HttpGet httpGet = new HttpGet(serverUri+"/"+reqUrl);
 InputStream is = null;
 StringBuilder stringBuilder = new StringBuilder();
 try {
     HttpParams params = new BasicHttpParams();
     HttpConnectionParams.setConnectionTimeout(params, 3000);
     HttpConnectionParams.setSoTimeout(params, 3000);
     httpClient = new DefaultHttpClient(params);
     Log.d(TAG, "executing...");
     HttpResponse httpResponse = httpClient.execute(httpGet);
     StatusLine status = httpResponse.getStatusLine();
     if(status.getStatusCode() == HttpStatus.SC_OK && httpResponse != null){
        /** mengambil response string dari server */
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while((line = reader.readLine()) != null){
           stringBuilder.append(line+"\n");
        }
       is.close();
    }
 } catch (Exception e) {
    Log.d(TAG, e.getMessage());
 }
 return stringBuilder.toString();
 }
/** Mengirimkan POST request */
 public int sendPostRequest(Mahasiswa mahasiswa, String url){
     int replyCode = 99;
     HttpClient httpClient;
     HttpPost post = new HttpPost(this.serverUri+"/"+url);
     /** menambahkan parameter ke dalam request */
     List<NameValuePair> value = new ArrayList<NameValuePair>();
     value.add(new BasicNameValuePair("id", mahasiswa.getId().toString()));
     value.add(new BasicNameValuePair("nim", mahasiswa.getNim()));
     value.add(new BasicNameValuePair("nama", mahasiswa.getNama()));
     value.add(new BasicNameValuePair("telp", mahasiswa.getTelp()));
     value.add(new BasicNameValuePair("alamat", mahasiswa.getAlamat()));
     try {
        HttpParams params = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(params, 3000);
        HttpConnectionParams.setSoTimeout(params, 3000);
        httpClient = new DefaultHttpClient(params);
        post.setEntity(new UrlEncodedFormEntity(value));
        Log.d(TAG, "executing post...");
        HttpResponse httpResponse = httpClient.execute(post);
        StatusLine status = httpResponse.getStatusLine();
        if(status.getStatusCode() == HttpStatus.SC_OK){
           Log.d(TAG, "submitted sucessfully...");
           replyCode = status.getStatusCode();
        }
     } catch (IOException e) {
        Log.d(TAG, e.getMessage());
     }
 return replyCode;
 }
}


MainActivity akan kita gunakan untuk menampilkan ListView nama mahasiswa dan NIM. Seperti berikut:

ListView

ListView
c. Ubah layout activity_main.xml

RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity" >
<ListView
 android:id="@+id/listview_main"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:dividerHeight="1dp"
 android:layout_margin="5dp" >
 </ListView>
</RelativeLayout>


d. Tambahkan layout baru list_row.xml
Layout ini adalah custom ListView agar dapat menampilhan Nama dan NIM mahasiswa dalam ListView.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:layout_margin="5dp"
 >
<TextView
 android:id="@+id/text_nama"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentLeft="true"
 android:layout_alignParentTop="true"
 android:text="@string/app_name"
 android:typeface="sans"
 android:textColor="@android:color/background_dark"
 android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
 android:id="@+id/text_nim"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentLeft="true"
 android:text="@string/app_name"
 android:textColor="@android:color/background_dark"
 android:layout_below="@+id/text_nama"/>
</RelativeLayout>


e. Membuat List Adapter
Untuk menampilkan custom ListView, kita membutuhkan sebuah adapter yang inherit kepada BaseAdapter. ListAdapterMahasiswa juga meng-implements Filterable yang berguna saat melakukan pencarian. LisBerikut adalah potongan source code nya:
ListAdapterMahasiswa.java