
Retrofit ialah sebuah library REST Client yang gampang digunakan, Retrofit ini sendiri memanfaatkan REST Server yang menyadiakan resources yang direpresentasikan ke dalam bentuk Text, JSON maupun XML. dan kali ini yang akan kita gunakan yaitu JSON, dimana JSON sendiri ialah format yang paling sering dipakai untuk mentransmisikan data terstruktur melalui suatu koneksi jaringan di dalam proses yang disebut serialisasi.
Android Retrofit2 Tutorial - Menampilkan data dari Database ke RecyclerView (HTTP GET)
Persiapan Server
Sebelum memulai, persiapan yang harus dilakukan yaitu kita harus meyiapkan Webserver menyerupai Xampp, Wampp dll. kemudian :
1. Membuat database. Buat database dengan nama users
kemudian instruksi dibawah ini ialah tabelnya
-- -- Struktur dari tabel `users` -- CREATE TABLE `users` ( `id` mediumint(8) UNSIGNED NOT NULL, `name` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
2. Mengisikan data ke database Supaya sanggup eksklusif ditampilkan nantinya (gausah input satu persatu, kita masukin dulu deh data yang akan ditampilkan).
Walaupun nantinya kita juga akan menciptakan cara input data ke database memakai retrofit2, tapi itu nanti.
-- -- Dumping data untuk tabel `users` -- INSERT INTO `users` (`id`, `name`, `email`) VALUES (1, 'Plato Floydo', 'neque.vitae@purussapiengravida.ca'), (2, 'Sawyer Gonzalez', 'Aliquam.rutrum@auctorvitaealiquet.edu'), (3, 'Zachary Schmidt', 'pharetra.ut@nisisem.ca'), (4, 'Cyrus Mason', 'risus.at@arcuSed.ca'), (5, 'Julian Houston', 'mauris.Suspendisse@semconsequatnec.com'), (6, 'Kane Mcdowell', 'ac.feugiat@id.co.uk'), (7, 'Isaac Fowler', 'neque.sed.sem@et.ca'), (8, 'Galvin Austin', 'iaculis@ridiculusmus.net'), (9, 'Thor Cabrera', 'vestibulum.lorem@Donecnon.co.uk'), (10, 'Kieran Foster', 'eget.dictum.placerat@Maurisvelturpis.co.uk'), (11, 'Norman Stephens', 'commodo.hendrerit.Donec@montes.edu'), (12, 'Ulric Richard', 'dapibus@velturpis.edu'), (13, 'Cyrus Lee', 'varius.et.euismod@Nulla.edu'), (14, 'Lucas Acosta', 'primis.in@anteblanditviverra.org'), (15, 'Damian Gutierrez', 'mauris.Integer@molestiein.net'), (16, 'Declan Gray', 'Sed.eu.eros@arcu.ca'), (17, 'Trevor Koch', 'malesuada.ut.sem@euturpis.ca'), (18, 'Odysseus Reese', 'quam.quis@etultricesposuere.com'), (19, 'Thomas Willis', 'leo.in.lobortis@Aliquamgravida.ca'), (20, 'Gary Mercado', 'mi.felis.adipiscing@nibhsitamet.ca'), (21, 'Roth Carver', 'mollis@pedenecante.com'), (22, 'Ryan Ashley', 'placerat.orci.lacus@Fuscealiquetmagna.net'), (23, 'Quentin Berger', 'tincidunt@urnanecluctus.edu'), (24, 'Griffin Cervantes', 'sit.amet.consectetuer@utpellentesque.com'), (25, 'Cade Mckee', 'Mauris.vel@arcu.ca'), (26, 'Martin Erickson', 'nisi.a@esttempor.net'), (27, 'Tanner Hale', 'risus.varius@convalliserat.com'), (28, 'Dillon Levine', 'Aenean.euismod@ipsumnon.co.uk'), (29, 'Bevis West', 'Quisque.varius.Nam@nuncsitamet.ca'), (30, 'Giacomo Hensley', 'Integer@justonec.ca'), (31, 'Palmer Gross', 'tincidunt@Pellentesque.net'), (32, 'Castor Vance', 'amet.dapibus@massarutrummagna.co.uk'), (33, 'Warren Case', 'Nunc.lectus@vulputate.edu'), (34, 'Dalton Tillman', 'leo.Vivamus.nibh@Fusce.net'), (35, 'Hu Clayton', 'et.euismod@at.org'), (36, 'Sylvester Nolan', 'Proin.velit@sagittissemperNam.com'), (37, 'Harper Palmer', 'Nunc.sed@faucibus.ca'), (38, 'Zeph Washington', 'pretium.neque.Morbi@Nulla.org'), (39, 'Julian Neal', 'Nunc@diamvel.net'), (40, 'Hiram Newton', 'primis.in@sedorcilobortis.com'), (41, 'August Banks', 'odio.Etiam@urna.org'), (42, 'Basil Garrison', 'elit@enimsit.edu'), (43, 'Buckminster Nelson', 'quis.turpis.vitae@adipiscing.com'), (44, 'Lane Benjamin', 'aliquam@semper.net'), (45, 'Burke Gordon', 'ac@vulputateduinec.net'), (46, 'Logan Harris', 'gravida@Curabituregestas.edu'), (47, 'Barry Hansen', 'Donec.dignissim@ornarelectus.org'), (48, 'Jared Mckenzie', 'ante.dictum@duiFusce.edu'), (49, 'Timon Bruce', 'neque.pellentesque@quistristiqueac.edu'), (50, 'Jordan Gross', 'Proin.vel.arcu@felispurus.net'), (51, 'Rudyard Sparks', 'montes@maurisid.com'), (52, 'Abraham Wong', 'orci.Phasellus.dapibus@Proin.org'), (53, 'Barrett Glenn', 'suscipit@nunc.ca'), (54, 'Ciaran Snyder', 'ipsum@turpisAliquam.edu'), (55, 'Carl Golden', 'Aliquam@atsem.co.uk'), (56, 'Leroy Pollard', 'Etiam@loremipsumsodales.com'), (57, 'Garth Burch', 'est.congue@Namconsequat.com'), (58, 'Lane Huff', 'malesuada.vel.venenatis@dolorDonec.co.uk'), (59, 'Gray Kirkland', 'et.eros.Proin@nonantebibendum.com'), (60, 'Bert Forbes', 'adipiscing@gravida.com'), (61, 'Elvis Jenkins', 'arcu.Vivamus@aliquetvel.ca'), (62, 'Mark Knox', 'leo.Vivamus.nibh@arcuVestibulumut.net'), (63, 'Lance Colon', 'congue@ipsumporta.org'), (64, 'Vladimir Hansen', 'et.commodo@torquentperconubia.co.uk'), (65, 'Wade Barton', 'nibh@DuisgravidaPraesent.co.uk'), (66, 'Dante Molina', 'consectetuer.adipiscing@ipsumdolorsit.co.uk'), (67, 'Charles Hudson', 'tempor@turpisnonenim.edu'), (68, 'Elton Kane', 'Sed@luctusutpellentesque.co.uk'), (69, 'Abel Frank', 'posuere.vulputate.lacus@etmagnis.com'), (70, 'Garrett Aguilar', 'aliquet.odio.Etiam@nibhdolornonummy.ca'), (71, 'Lester Hendricks', 'mauris@ategestas.edu'), (72, 'Elmo Franks', 'Sed.eu.nibh@venenatislacusEtiam.com'), (73, 'Randall Anderson', 'Mauris.vestibulum@sapien.ca'), (74, 'Jackson Buckley', 'dui.Cum.sociis@nonleoVivamus.edu'), (75, 'George Mercado', 'non.lacinia@sitamet.com'), (76, 'Prescott Bradley', 'a.odio@inconsectetuer.edu'), (77, 'Wallace Downs', 'odio.auctor@ornare.edu'), (78, 'Vladimir Mcintosh', 'eget.massa@enimgravida.org'), (79, 'Dennis Hull', 'Mauris.non.dui@leo.ca'), (80, 'Keefe Short', 'fermentum.vel.mauris@Phasellusvitaemauris.org'), (81, 'Xanthus Hampton', 'Sed@Etiam.com'), (82, 'Gregory Bishop', 'magnis@Sedeget.com'), (83, 'Basil Acosta', 'enim.diam.vel@purusactellus.net'), (84, 'Griffith Weiss', 'ante@rhoncusNullam.com'), (85, 'Nash Mcdowell', 'commodo@ante.ca'), (86, 'Phelan Gilbert', 'natoque.penatibus.et@fames.com'), (87, 'Devin Gregory', 'sed.hendrerit@bibendumDonecfelis.edu'), (88, 'Jelani Marquez', 'leo@mollis.ca'), (89, 'Kadeem Harper', 'sapien@enimEtiamimperdiet.net'), (90, 'Shad Tyson', 'mauris@duiCum.net'), (91, 'Nigel Cole', 'aliquet.odio.Etiam@dictumeu.net'), (92, 'Jerry Short', 'Nam@sitametconsectetuer.ca'), (93, 'Josiah Chase', 'Aenean.massa.Integer@in.net'), (94, 'Chaim Alvarado', 'ultricies@varius.net'), (95, 'Victor Manning', 'est.Mauris@blandit.ca'), (96, 'Caldwell Marks', 'a.nunc@amet.com'), (97, 'Burke Colon', 'lacus.vestibulum.lorem@euelit.co.uk'), (98, 'Keane Molina', 'adipiscing.Mauris@dolornonummy.org'), (99, 'Theodore Hutchinson', 'id@dignissimmagna.edu'), (100, 'Griffin Gates', 'imperdiet.nec@Donec.net'), (107, 'Haerul Muttaqin', 'haerul@mail.com');
Pastikan database kalian sudah menyerupai ini :
Kalo database sudah siap kita lanjut pada pembuatan php

Kalo database sudah siap kita lanjut pada pembuatan php
3. Pembuatan file PHP
PHP ini lah yang akan menkoneksikan ke database hingga PHP pula yang akan menyebarkan JSON untuk client, dan nantinya yang akan di olah lagi oleh android yang dihubungkan melalui jaringan koneksi.
- Buat folder dengan nama
retrofit di direktorihtdocs - Kemudian buat file PHP dengan nama
connect.php di direktoriretrofit file ini yang akan mengkoneksikan php dengan database mysql anda
instruksi dibawah ini ialah untuk file
dan dangan lupa mengubah define dan sesuaikan dengan server kalian.
//connect.php <?php define('hostname','localhost'); define('username', 'root'); define('password', ''); define('database', 'users'); $conn = mysqli_connect(hostname, username, password, database) or die('Unable to connect'); ?>
Kemudian,
- Buat file gres dengan nama
getcontacts.php di direktoriretrofit
instruksi dibawah ini ialah untuk file
//getcontact.php <?php require_once 'connect.php'; $type = $_GET['item_type']; // menyidik data yang dikirim melalui GET if ($type == 'users') { // jikalau $_GET['item_type'] yaitu users, maka akan menjalankan instruksi dibawahnya $query = "SELECT * FROM users"; $result = mysqli_query($conn, $query); $response = array(); while( $row = mysqli_fetch_assoc($result) ){ // perulangan dari fetching asosiativ array_push($response, array( 'id'=>$row['id'], 'name'=>$row['name'], 'email'=>$row['email']) ); } echo json_encode($response); // enchoding kedalam JSON dari array } mysqli_close($conn); // menutup koneksi mysql ?>
Makara kalo file getcontact.php ini dijalankan akan menghasilkan data JSON :
kalian sanggup panggil ini untuk mencoba menjalankannya
http://localhost/retrofit/getcontact.php?item_type=users
Kalo karenanya udah kayak gini :
kalian sanggup panggil ini untuk mencoba menjalankannya
http://localhost/retrofit/getcontact.php?item_type=users
Kalo karenanya udah kayak gini :
[ { "id": "1", "name": "Plato Floydo", "email": "neque.vitae@purussapiengravida.ca" }, { "id": "2", "name": "Sawyer Gonzalez", "email": "Aliquam.rutrum@auctorvitaealiquet.edu" }, { "id": "3", "name": "Zachary Schmidt", "email": "pharetra.ut@nisisem.ca" }, { "id": "4", "name": "Cyrus Mason", "email": "risus.at@arcuSed.ca" }, { "id": "5", "name": "Julian Houston", "email": "mauris.Suspendisse@semconsequatnec.com" }, { "id": "6", "name": "Kane Mcdowell", "email": "ac.feugiat@id.co.uk" }, { "id": "7", "name": "Isaac Fowler", "email": "neque.sed.sem@et.ca" }, { "id": "8", "name": "Galvin Austin", "email": "iaculis@ridiculusmus.net" }, { "id": "9", "name": "Thor Cabrera", "email": "vestibulum.lorem@Donecnon.co.uk" }, { "id": "10", "name": "Kieran Foster", "email": "eget.dictum.placerat@Maurisvelturpis.co.uk" }, { "id": "11", "name": "Norman Stephens", "email": "commodo.hendrerit.Donec@montes.edu" }, { "id": "12", "name": "Ulric Richard", "email": "dapibus@velturpis.edu" }, { "id": "13", "name": "Cyrus Lee", "email": "varius.et.euismod@Nulla.edu" }, { "id": "14", "name": "Lucas Acosta", "email": "primis.in@anteblanditviverra.org" }, { "id": "15", "name": "Damian Gutierrez", "email": "mauris.Integer@molestiein.net" }, { "id": "16", "name": "Declan Gray", "email": "Sed.eu.eros@arcu.ca" }, { "id": "17", "name": "Trevor Koch", "email": "malesuada.ut.sem@euturpis.ca" }, { "id": "18", "name": "Odysseus Reese", "email": "quam.quis@etultricesposuere.com" }, { "id": "19", "name": "Thomas Willis", "email": "leo.in.lobortis@Aliquamgravida.ca" }, { "id": "20", "name": "Gary Mercado", "email": "mi.felis.adipiscing@nibhsitamet.ca" }, { "id": "21", "name": "Roth Carver", "email": "mollis@pedenecante.com" }, { "id": "22", "name": "Ryan Ashley", "email": "placerat.orci.lacus@Fuscealiquetmagna.net" }, { "id": "23", "name": "Quentin Berger", "email": "tincidunt@urnanecluctus.edu" }, { "id": "24", "name": "Griffin Cervantes", "email": "sit.amet.consectetuer@utpellentesque.com" }, { "id": "25", "name": "Cade Mckee", "email": "Mauris.vel@arcu.ca" }, { "id": "26", "name": "Martin Erickson", "email": "nisi.a@esttempor.net" }, { "id": "27", "name": "Tanner Hale", "email": "risus.varius@convalliserat.com" }, { "id": "28", "name": "Dillon Levine", "email": "Aenean.euismod@ipsumnon.co.uk" }, { "id": "29", "name": "Bevis West", "email": "Quisque.varius.Nam@nuncsitamet.ca" }, { "id": "30", "name": "Giacomo Hensley", "email": "Integer@justonec.ca" }, { "id": "31", "name": "Palmer Gross", "email": "tincidunt@Pellentesque.net" }, { "id": "32", "name": "Castor Vance", "email": "amet.dapibus@massarutrummagna.co.uk" }, { "id": "33", "name": "Warren Case", "email": "Nunc.lectus@vulputate.edu" }, { "id": "34", "name": "Dalton Tillman", "email": "leo.Vivamus.nibh@Fusce.net" }, { "id": "35", "name": "Hu Clayton", "email": "et.euismod@at.org" }, { "id": "36", "name": "Sylvester Nolan", "email": "Proin.velit@sagittissemperNam.com" }, { "id": "37", "name": "Harper Palmer", "email": "Nunc.sed@faucibus.ca" }, { "id": "38", "name": "Zeph Washington", "email": "pretium.neque.Morbi@Nulla.org" }, { "id": "39", "name": "Julian Neal", "email": "Nunc@diamvel.net" }, { "id": "40", "name": "Hiram Newton", "email": "primis.in@sedorcilobortis.com" }, { "id": "41", "name": "August Banks", "email": "odio.Etiam@urna.org" }, { "id": "42", "name": "Basil Garrison", "email": "elit@enimsit.edu" }, { "id": "43", "name": "Buckminster Nelson", "email": "quis.turpis.vitae@adipiscing.com" }, { "id": "44", "name": "Lane Benjamin", "email": "aliquam@semper.net" }, { "id": "45", "name": "Burke Gordon", "email": "ac@vulputateduinec.net" }, { "id": "46", "name": "Logan Harris", "email": "gravida@Curabituregestas.edu" }, { "id": "47", "name": "Barry Hansen", "email": "Donec.dignissim@ornarelectus.org" }, { "id": "48", "name": "Jared Mckenzie", "email": "ante.dictum@duiFusce.edu" }, { "id": "49", "name": "Timon Bruce", "email": "neque.pellentesque@quistristiqueac.edu" }, { "id": "50", "name": "Jordan Gross", "email": "Proin.vel.arcu@felispurus.net" }, { "id": "51", "name": "Rudyard Sparks", "email": "montes@maurisid.com" }, { "id": "52", "name": "Abraham Wong", "email": "orci.Phasellus.dapibus@Proin.org" }, { "id": "53", "name": "Barrett Glenn", "email": "suscipit@nunc.ca" }, { "id": "54", "name": "Ciaran Snyder", "email": "ipsum@turpisAliquam.edu" }, { "id": "55", "name": "Carl Golden", "email": "Aliquam@atsem.co.uk" }, { "id": "56", "name": "Leroy Pollard", "email": "Etiam@loremipsumsodales.com" }, { "id": "57", "name": "Garth Burch", "email": "est.congue@Namconsequat.com" }, { "id": "58", "name": "Lane Huff", "email": "malesuada.vel.venenatis@dolorDonec.co.uk" }, { "id": "59", "name": "Gray Kirkland", "email": "et.eros.Proin@nonantebibendum.com" }, { "id": "60", "name": "Bert Forbes", "email": "adipiscing@gravida.com" }, { "id": "61", "name": "Elvis Jenkins", "email": "arcu.Vivamus@aliquetvel.ca" }, { "id": "62", "name": "Mark Knox", "email": "leo.Vivamus.nibh@arcuVestibulumut.net" }, { "id": "63", "name": "Lance Colon", "email": "congue@ipsumporta.org" }, { "id": "64", "name": "Vladimir Hansen", "email": "et.commodo@torquentperconubia.co.uk" }, { "id": "65", "name": "Wade Barton", "email": "nibh@DuisgravidaPraesent.co.uk" }, { "id": "66", "name": "Dante Molina", "email": "consectetuer.adipiscing@ipsumdolorsit.co.uk" }, { "id": "67", "name": "Charles Hudson", "email": "tempor@turpisnonenim.edu" }, { "id": "68", "name": "Elton Kane", "email": "Sed@luctusutpellentesque.co.uk" }, { "id": "69", "name": "Abel Frank", "email": "posuere.vulputate.lacus@etmagnis.com" }, { "id": "70", "name": "Garrett Aguilar", "email": "aliquet.odio.Etiam@nibhdolornonummy.ca" }, { "id": "71", "name": "Lester Hendricks", "email": "mauris@ategestas.edu" }, { "id": "72", "name": "Elmo Franks", "email": "Sed.eu.nibh@venenatislacusEtiam.com" }, { "id": "73", "name": "Randall Anderson", "email": "Mauris.vestibulum@sapien.ca" }, { "id": "74", "name": "Jackson Buckley", "email": "dui.Cum.sociis@nonleoVivamus.edu" }, { "id": "75", "name": "George Mercado", "email": "non.lacinia@sitamet.com" }, { "id": "76", "name": "Prescott Bradley", "email": "a.odio@inconsectetuer.edu" }, { "id": "77", "name": "Wallace Downs", "email": "odio.auctor@ornare.edu" }, { "id": "78", "name": "Vladimir Mcintosh", "email": "eget.massa@enimgravida.org" }, { "id": "79", "name": "Dennis Hull", "email": "Mauris.non.dui@leo.ca" }, { "id": "80", "name": "Keefe Short", "email": "fermentum.vel.mauris@Phasellusvitaemauris.org" }, { "id": "81", "name": "Xanthus Hampton", "email": "Sed@Etiam.com" }, { "id": "82", "name": "Gregory Bishop", "email": "magnis@Sedeget.com" }, { "id": "83", "name": "Basil Acosta", "email": "enim.diam.vel@purusactellus.net" }, { "id": "84", "name": "Griffith Weiss", "email": "ante@rhoncusNullam.com" }, { "id": "85", "name": "Nash Mcdowell", "email": "commodo@ante.ca" }, { "id": "86", "name": "Phelan Gilbert", "email": "natoque.penatibus.et@fames.com" }, { "id": "87", "name": "Devin Gregory", "email": "sed.hendrerit@bibendumDonecfelis.edu" }, { "id": "88", "name": "Jelani Marquez", "email": "leo@mollis.ca" }, { "id": "89", "name": "Kadeem Harper", "email": "sapien@enimEtiamimperdiet.net" }, { "id": "90", "name": "Shad Tyson", "email": "mauris@duiCum.net" }, { "id": "91", "name": "Nigel Cole", "email": "aliquet.odio.Etiam@dictumeu.net" }, { "id": "92", "name": "Jerry Short", "email": "Nam@sitametconsectetuer.ca" }, { "id": "93", "name": "Josiah Chase", "email": "Aenean.massa.Integer@in.net" }, { "id": "94", "name": "Chaim Alvarado", "email": "ultricies@varius.net" }, { "id": "95", "name": "Victor Manning", "email": "est.Mauris@blandit.ca" }, { "id": "96", "name": "Caldwell Marks", "email": "a.nunc@amet.com" }, { "id": "97", "name": "Burke Colon", "email": "lacus.vestibulum.lorem@euelit.co.uk" }, { "id": "98", "name": "Keane Molina", "email": "adipiscing.Mauris@dolornonummy.org" }, { "id": "99", "name": "Theodore Hutchinson", "email": "id@dignissimmagna.edu" }, { "id": "100", "name": "Griffin Gates", "email": "imperdiet.nec@Donec.net" }, { "id": "107", "name": "Haerul Muttaqin", "email": "haerul@mail.com" } ]
Jadi, kalo udah hingga sini Server kalian udah siap deh..
kini kita lanjut ke tahap pembuatan aplikasi android nya.
kini kita lanjut ke tahap pembuatan aplikasi android nya.
Pembuatan Aplikasi
4. Persiapan Project di Android Studio
- Buat project gres (beri nama terserah anda saja) kemudian,
- Tambahkan dependencies menyerupai berikut pada
build.gradle proyek kalian ://build.gradle(Module:app) implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.2.0' implementation 'com.android.support:recyclerview-v7:26.1.0'
5. Pembuatan Project
- Buka file
res/layout/activtiy_main.xml ,
Ubah menyerupai instruksi dibawah ini Tambahkan dependencies menyerupai berikut pada
<?xml version="1.0" encoding="utf-8"?> <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"> <ProgressBar android:id="@+id/prograss" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
instruksi di atas yaitu untuk menapilkan baris contact di RecyclerView
- Kemudian buat file xml gres dan beri nama
item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="wrap_content"> <TextView android:paddingTop="10dp" android:paddingLeft="15dp" android:paddingRight="15dp" android:textSize="20sp" android:textColor="#111" android:id="@+id/name" android:text="Name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:paddingTop="5dp" android:paddingBottom="10dp" android:paddingLeft="15dp" android:paddingRight="15dp" android:id="@+id/email" android:text="Email" android:layout_width="match_parent" android:layout_height="wrap_content" /> <View android:background="#bfbfbf" android:layout_width="match_parent" android:layout_height="0.1dp"/> </LinearLayout>
Kode di atas akan di-populasikan oleh adapter.
jadi, nantinya instruksi ini akan dibentuk berulang sesuai data yang ada, yang akan ditampilkan dilayar.
Kemudian,
Adapter.java
jadi, nantinya instruksi ini akan dibentuk berulang sesuai data yang ada, yang akan ditampilkan dilayar.
Kemudian,
- Buat file Java gres dan beri nama
Adapter.java
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.List; /** * Created by haerul on 17/03/18. */ public class Adapter extends RecyclerView.Adapter { private List contacts; private Context context; public Adapter(List contacts, Context context) { this.contacts = contacts; this.context = context; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.name.setText(contacts.get(position).getName()); holder.email.setText(contacts.get(position).getEmail()); } @Override public int getItemCount() { return contacts.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder{ TextView name,email; public MyViewHolder(View itemView) { super(itemView); name = itemView.findViewById(R.id.name); email = itemView.findViewById(R.id.email); } } }
Kemudian,
buatkan model untuk menampung data dari penyedia. maksudnya nanti data yang kita Request memakai retrofit akan di-set kedalam model, kemudian di presentasikan oleh adapter yang sudah dibentuk diatas.
Contact.java
buatkan model untuk menampung data dari penyedia. maksudnya nanti data yang kita Request memakai retrofit akan di-set kedalam model, kemudian di presentasikan oleh adapter yang sudah dibentuk diatas.
- Buat file java baru, beri nama model tersebut dengan nama
Contact.java
import com.google.gson.annotations.SerializedName; /** * Created by haerul on 17/03/18. */ public class Contact { @SerializedName("id") private int Id; @SerializedName("name") private String Name; @SerializedName("email") private String Email; public int getId() { return Id; } public String getName() { return Name; } public String getEmail() { return Email; } }
dan parameter yang diisikan harus sama dengan JSONArray yang dibuat
Kemudian,
- Buat file java baru, beri nama
ApiClient.java import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by haerul on 17/03/18. */ public class ApiClient { public static final String BASE_URL = "http://ipaddress/retrofit/"; public static Retrofit retrofit; public static Retrofit getApiClient(){ if (retrofit==null){ retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); } return retrofit; } }
/retrofit/ ialah folder yang taid dibentuk dan didalam nya terdapat file php yang dibuat, dan jangan lupan anda mengganti ipaddress dengan IP Address laptop kalian.
Kemudian,
- Buat file java baru, beri nama
ApiInterface.java Jangan lupa untuk mengganti Kind : menjadi Interface

Berikut ini instruksi untuk
import java.util.List; import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Query; /** * Created by haerul on 17/03/18. */ public interface ApiInterface { @GET("getcontacts.php") Call < List< Contact>> getContact( @Query("item_type") String item_type ); }
- Karena kita akan menciptakan undangan dengan metode GET jadi, yang akan kita gunakan yaitu
@GET() dan parameternya diisi dengan nama file php yang kita buat lengkap dengan extentionnya (.php). -
@Query("item_type") String item_type ialah data yang dimasukan kedalam metode GET tersebut, yang nantinya akan ditangkap oleh file php dengan namaitem_type - Kemudian,
getContact(.. itu sendiri akan memanggil kembali data yang dikirimkan.
Dan yang terakhir instruksi untuk MainActivity.java
- Buka file
MainActvitiy kemudia ubah instruksi nya menjadi menyerupai ini :
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; import java.util.List; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private RecyclerView.LayoutManager layoutManager; private List contacts; private Adapter adapter; private ApiInterface apiInterface; ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); progressBar = findViewById(R.id.prograss); recyclerView = findViewById(R.id.recyclerView); layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); recyclerView.setHasFixedSize(true); fetchContact("users"); } public void fetchContact(String type){ apiInterface = ApiClient.getApiClient().create(ApiInterface.class); Call< List< Contact>> call = apiInterface.getContact(type); call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { progressBar.setVisibility(View.GONE); contacts = response.body(); adapter = new Adapter(contacts, MainActivity.this); recyclerView.setAdapter(adapter); adapter.notifyDataSetChanged(); } @Override public void onFailure(Call> call, Throwable t) { progressBar.setVisibility(View.GONE); Toast.makeText(MainActivity.this, "Error\n"+t.toString(), Toast.LENGTH_LONG).show(); } }); } }