Dizzy Coding

Ngoding jadi pusing karena lupa.

Breaking

Tuesday, January 16

January 16, 2024

Laravel Dan PostgreSql di Docker

    Kali ini saya sedang mencoba mempelajari PHP framework yang masih sering mendapatkan update yaitu framework Laravel. Framework ini dibangun dengan bahasa pemrograman PHP. Saat ini Laravel sudah mencapai versi 10.x.

    Untuk melakukan ujicoba, dan mebiasakan diri dengan framework ini, cara yang terfikir adalah dengan mencobanya dan terus mencoba hingga akhirnya bisa terbiasa dengan framework ini. Supaya saya bisa melakukan hal tersebut, saya membutuhkan server php, composer dan juga postgresql sebagai databasenya.

    Untuk server PHP nya, saya akan menggunakan Nginx.Karena Nginx tidak bisa mengexekusi script PHP, sehingga kita perlu menambahkan PHP FPM (FastCGI Process Management) sebagai eksekutor script PHP nya, sedangkan Nginx sebagai penerima request dari client ke PHP FPM, dan pemberi response hasil eksekusi dari PHP FPM ke client.

    Selain itu, saya juga memerlukan composer. Composer ini sangat mempermudah dalam melakukan installasi library atau dependency yang nantinya diperlukan ketika sedang melakukan ujicoba ataupun saat sedang mendevelop aplikasi menggunakan Laravel.

    Untuk kebutuhan - kebutuhan tersebut, akan saya letakkan di dalam docker. Hal ini seperti pada alasan yang sudah saya sebutkan di catatan saya sebelumnya Kenapa Docker ?

Apa saja yang akan kita lakukan ?

0. Persiapan
1. Membuat Dockerfile
2. Membuat docker-compose.yml
3. Membuat config untuk Nginx
4. Membuat Container
5. Membuat project Laravel baru
6. Menghubungkan Laravel dengan database Postgresql
7. Melakukan Pengecekan, apakah database sudah terhubung, dan data bisa tampil.

0. Persiapan

    Buatlah sebuah folder (Terserah dimanapun, asal jangan didalam recyclerbin). disini saya membuat folder dengan nama laravel-environment

    Didalam folder laravel-environment, saya membuat folder "database","docker-config","project"

1. Membuat Dockerfile (laravel-environment/Dockerfile)

    Menurut pemahaman saya, setiap kita ingin membuat container pada docker, kita perlu menentukan sumber imagenya darimana. Sudah banyak image yang dibuat oleh orang lain, dan kita hanya perlu membuat container dengan menggunakan image tersebut. Namun dalam keadaan sehari-hari yang kita hadapi, seringkali apa yang sudah disediakan berbeda dengan apa yang kita butuhkan. Itulah kenapa terkadang kita perlu membuat image itu sendiri supaya sesuai dengan apa yang kita butuhkan. 

    Dockerfile adalah dokumen teks yang berisi perintah untuk membangun sebuah image. Didalam file Dockerfile kita bisa memberikan perintah-perintah supaya image yang terbentuk nantinya akan menjadi image yang sesuai dengan kebutuhan.

    Sebelumnya sudah disebutkan, bahwa kita butuh PHP FPM untuk menjalankan script PHP, dan juga saya membutuhkan composer untuk membantu proses install library atau dependensi nantinya. Maka dari itu, saya akan membuat Dockerfile yang nantinya akan membentuk image dengan kombinasi (PHP FPM dan composer)

Berikut bentuk filenya :

2. Membuat docker-compose.yml (laravel-environment/docker-compose.yml)

    Image yang spesifik dengan kebutuhan saya, sudah saya persiapkan didalam Dockerfile sebelumnya. Sedangkan sisanya, seperti Nginx dan postgreSql tidak ada kebutuhan yang spesial. Jadi untuk image sisanya, saya akan menggunakan image yang sudah ada atau sudah disediakan.

    Tahap selanjutnya hanya perlu mengkombinasikan image - image menjadi container. Untuk membuat hal tersebut, saya membuatnya seperti berikut :

3. Membuat config untuk Nginx (laravel-environment/docker-config/default.conf)

    Sudah dijelaskan sebelumnya, bahwa Nginx tidak akan bisa menjalankan script PHP, sehingga kita perlu mengarahkan Nginx supaya menuju ke PHP FPM.

Berikut file config yang saya buat :

4. Membuat Container

    Semua persiapan untuk membuat container sudah selesai. Saatnya kita eksekusi untuk membuat containernya.

    Klik kanan folder laravel-environment, lalu pilih buka terminal (Setiap OS beda-beda). Setelah terminal terbuka, jalankan perintah berikut :

docker compose up -d

    Setelah selesai, jika kita buka Docker desktop, maka akan muncul container-container yang sudah diatur sebelumnya, yaitu postgresql, nginx dan php fpm.


5. Membuat project Laravel baru

    Pada saat saya membuat Dockerfile, di dalamnya saya juga sekaligus menambahkan perintah untuk melakukan install composer. Sehingga composer akan ada di dalam container yang dibangun dengan image dari Dockerfile tersebut. Pada kasus kali ini, composer terdapat pada container fpm-laravel-environment. Jadi jika ingin mengexekusi perintah composer yang ada di dalam container, bisa menggunakan perintah berikut :

docker exec -it fpm-laravel-environment composer create-project laravel/laravel /var/www/

Setelah prosesnya selesai, maka folder laravel-environment/project akan berisi project laravel. Sekarang coba akses localhost dari browser, seharusnya sudah bisa menampilkan halaman defaultnya Laravel.

6. Menghubungkan Laravel dengan database Postgresql

Untuk menghubungkan project laravel dengan database postgresql yang sudah saya buat, saya perlu merubah file .env yang ada di dalam folder laravel-environment/project menjadi seperti ini :


7. Melakukan Pengecekan, apakah database sudah terhubung, dan data bisa tampil.

    Setelah sudah selesai melakukan configurasi supaya Laravel bisa terhubung dengan database postgresql. Kita bisa melakukan perintah untuk membuat tabel migrasi. Ini nanti berguna dalam keperluan migrasi tabel dan lain - lain. Berikut perintahnya :

docker exec -it fpm-laravel-environment php /var/www/artisan migrate:install

Jika koneksi ke database sudah benar, seharusnya perintah sebelumnya tidak akan memunculkan pesan error. 

Selanjutnya saya akan membuat data seeder atau data dummy menggunakan perintah bawaan dari artisan. Namun sebelum menjalankan perintah pembuatan seedernya, saya perlu mengubah sedikit code yang ada pada laravel-environment/project/database/seeders/DatabaseSeeder.php menjadi seperti berikut :


Code tersebut digunakan untuk menjalankan perintah, membuat data seeder sebanyak 10 data. Berikut perintah yang perlu di jalankan untuk membuat seeder 

docker exec -it fpm-laravel-environment php /var/www/artisan migrate --seed 

 Sejauh ini sudah berjalan tanpa muncul kendala, saatnya saya butuh pembuktian bahwa data yang ada pada database bisa ditampilkan menggunakan laravel. Tapi saya perlu merubah beberapa code untuk menampilkan data yang sudah ada.

Pertama, ubah dulu laravel-environment/routes/web.php menjadi seperti berikut


Selanjutnya, ubah file laravel-environment/resources/views/welcome.blade.php. Tambahkan 

{{dd($data)}}

Pada posisi paling atas, sehingga terlihat seperti berikut :


 Lalu test akses localhost dari browser. Niscaya akan menampilkan tampilan seperti berikut :


Umh, Nais. Datanya sudah muncul, artinya sekarang environment laravel, postgresql sudah bisa digunakan. 

Oh iya, kalau ada yang ingin clone reponya, bisa clone dari sini ya : Laravel Environment

Sunday, January 7

January 07, 2024

Docker : Kenapa dan Bagaimana ?

    Programmer selalu harus siap dengan environment atau ketersediaan aplikasi pendukung dalam mengerjakan suatu project. Seperti misalnya programmer Backend PHP, beliau harus sudah menginstall aplikasi pendukung supaya bisa melakukan pengkodingan di komputernya. Namun seringkali proses develop nya lancar, tetapi ketika melakukan deploy atau perilisan aplikasi yang sudah susah payah dibangun, menghadapi masalah. Masalah sederhana yang sering kali muncul adalah perbedaannya environment yang ada di komputer sang programmer dengan environment yang ada pada server hosting atau server tempat melakukan deploy. Semakin banyak perbedaan environment sang programmer dengan environment server, maka semakin banyak juga yang harus diperhatikan lagi. Karena hal itu bisa saja membuat kodingan yang sebelumnya sudah dibuat perlu banyak perubahan untuk menyesuaikan dengan environment yang ada pada server. Selain itu, masalah serupa akan terjadi lagi jika ternyata pengerjaan dari project tersebut ingin didelegasikan atau diserahkan ke programmer lain.


    Daripada harus mengulang - ulang hal merepotkan yang sama, kenapa tidak kita buat saja sebuah file yang berisi konfigurasi tentang kebutuhan environment dalam membangun project tersebut. Konfigurasi bisa dibuat supaya menghasilkan environment yang sama dengan kondisi yang ada pada server. Selain itu, jika kita ingin mendelegasikan project tersebut kepada programmer lain, maka programmer lain itu hanya perlu implementasikan saja konfigurasi yang sudah dibuat dan dia akan secara otomatis memiliki environment yang sama dengan yang sudah di tuliskan di dalam konfigurasi tersebut. Dengan begitu maka masalah tentang perbedaan environment tidak akan terjadi. Proses deploy tidak perlu khawatir, karena kita memiliki environment yang sama dengan yang ada pada server. Proses delegasi project tidak perlu khawatir, karena programmer lainnya juga akan mendapatkan environment yang sama.


    Docker adalah platform perangkat lunak yang memungkinkan pengembang untuk mengemas, mendistribusikan, dan menjalankan aplikasi dalam lingkungan kontainer. Kontainer adalah unit standar perangkat lunak yang mencakup kode dan semua dependensinya, memastikan aplikasi dapat berjalan dengan konsisten di berbagai lingkungan. Docker memungkinkan pengembang untuk mengisolasi aplikasi mereka dari infrastruktur yang mendasarinya, membuatnya mudah dipindahkan antar lingkungan pengembangan, pengujian, dan produksi.


    Sesuai dengan penjelasan tentang Docker diatas, kita bisa memanfaatkan Docker ini sebagai tools untuk menyelesaikan masalah yang sudah disebutkan sebelumnya. 

Friday, March 8

March 08, 2019

Pemrograman PHP Dasar (Variable)

Dalam bahasa pemrogaman, sudah umum dengan keberadaan variable, tapi saya tidak akan membahas langsung. Saya akan memulai dengan nostalgia ke masalalu terlebih dahulu.

Dulu sewatku saya masih di bangku sekolah dasar, saya ada belajar matematika, contohnya seperti ini.

2 + n = 5

Berapkah nilai n ?

udah pasti tau lah, nilai n berapa kan ?


Ok, cukup nostalgianya.

Yang ingin saya bahas sebelumnya adalah variable, lalu apakah hubungannya dengan nostalgia saya barusan ?

Menurut saya, n di dalam contoh diatas itu merupakan variable. Iya, variable, karena dia menyimpan nilai, yaitu nilai 3.

Secara dasar, variable itu sama seperti n di contoh tadi, sesuatu yang bisa digunakan untuk menyimpan nilai.

Supaya semakin pusing ayo kita coba di kodingan PHP nya ya.

Oh iya, saya asumsikan anda sudah menginstall xampp / wampp ya, dan saya juga asumsikan anda sudah tau, harus di letakkan dimana file PHP nya.

Ayo kita buat file PHP nya, untuk sekarang saya akan membuat file PHP dengan nama variable.php

NOTE : Pada bahasa pemrograman PHP, untuk membuat variable harus di awali dengan simbol dolar $

Pada gambar diatas, saya membuat dua buah variable, yang saya beri nama n dan juga total

pada variable n, saya beri nilai 3.

sedangkan pada variable total, saya melakukan penjumlahan dengan cara menambahkan nilai 2 dengan nilai yang ada di dalam variable n, yaitu nilai 3.

lalu, setelah saya melakukan proses penambahan pada variable total, saya memberikan perintah echo untuk meminta php supaya menampilkan nilai terakhir yang ada di dalam variable total

sehingga ketika kode php tersebut di jalankan, maka akan menampilkan hasil atau angka 5 seperti berikut

Ok, untuk kali ini, saya sudahi sampai disini dulu.
Sampai berjumpa lagi di tulisan saya yang selanjutnya.

Oh iya, Karena saya manusia, yang sudah pasti punya kesalahan, jadi saya ingin mengatakan maaf terlebih dahulu, dan sisanya, Saya mohon berikan komentar supaya saya bisa sedikit demi sedikit mengurangi kesalahan saya.

Terimakasih banyak.
March 08, 2019

Pemrograman PHP Dasar (Perkenalan)

Bahasa pemrograman PHP saat ini adalah bahasa pemrograman yang cukup dikenal, karena bahasa pemrograman ini sudah seperti menjadi bahasa pemrograman umum yang sering digunakan untuk membangun suatu website.

Untuk bisa memulai mempelajari bahasa pemrograman ini, diperlukan beberapa aplikasi tambahan. Yaitu Xampp, Wampp dll jika Sistem operasi yang digunakan adalah windows. 



Apasih itu Xampp, Wampp ?

Secara sederhana apliasi itu adalah aplikasi yang di dalamnya sudah terdapat beberapa paket aplikasi lagi. Sehingga, dengan menginstall aplikasi tersebut kita hanya perlu melakukan installasi sekali, dan paket-paket aplikasi lainnya akan ikut terinstal. Adapun paket - paket yang umumnya akan terinstall adalah (Apache2, Mysql, PHP dan PhpMyadmin). Sebenarnya itu adalah kepanjangan dari #ampp nya.

Kenapa perlu menginstall aplikasi tersebut ?
Ini hanya menurut saya pribadi, dan saya belum melakukan pencarian dengan seksama. Tetapi bahasa pemrograman PHP itu bukan bahasa pemrograman yang di compile terlebih dahulu baru kemudian di jalankan.


Jadi karena aplikasi yang di bangun dari bahasa pemrograman PHP tetap perlu di compile, maka dibutuhkan aplikasi yang tadi, yang bertugas sebagai compiler supaya ketika file php di jalankan, maka akan melakukan perintah-perintah yang sudah dituliskan di dalamnya.

Nah, jadi sebelum berlanjut ke tulisan saya yang selanjutnya, saya sarankan anda sudah melakukan installasi salah satu aplikasi tadi (Boleh Xampp ataupun Wampp).


Ok, untuk perkenalan, saya sudahi sampai disini dulu.
Sampai berjumpa lagi di tulisan saya yang selanjutnya.


Oh iya, Karena saya manusia, yang sudah pasti punya kesalahan, jadi saya ingin mengatakan maaf terlebih dahulu, dan sisanya, Saya mohon berikan komentar supaya saya bisa sedikit demi sedikit mengurangi kesalahan saya.

Terimakasih banyak

Thursday, February 21

February 21, 2019

Skill pertama yang harus anda miliki

Skill pertama yang harus anda miliki jika ingin menjadi seorang PROGRAMMER dengan cara otodidak akan saya bahas dengan bahasa dan dengan segenap pengalaman yang sudah saya alami sendiri di dalam artikel berikut ini.

Hai kalian para pembaca yang merasa masih newbie, masih nubb, masih bau kencur seperti saya (penulis) di bidang Pemrograman. Selamat, anda sedang membaca artikel yang tepat. Kenapa saya katakan tepat, karena dengan adanya Artikel ini, saya harap anda akan menjadi lebih baik.

Tukang ngomong.
Alasan saya membuat tulisan ini, sangat sederhana. Supaya kita semua bisa menjadi pemula yang tidak benar - benar kosong di bidang pemrograman. Ok, langsung aja yok apa sih Skill pertama yang harus kita miliki jika kita ingin menjadi salah satu orang yang bisa menyandang gelar ProGrammer.

Yang utama dan paling utama adalah Skill yang hanya bisa anda lakukan sendiri, karena skill ini biar bagaimanapun sejauh yang saya tau, belum pernah ada tutorialnya, kalaupun ada. mungkin hanya menjelaskan tentang kulitnya saja.

Apakah skill itu ?
Skill ini saya beri nama skill GOOGLING.

Yang mau skip membaca silahkan, yang mau lanjut, ayo lanjut bacanya.

Kenapa saya katakan skill GOOGLING. karena skill ini adalah skill yang sangat sulit untuk di ajarkan. Skill ini hanya bisa Bangkit dari diri seseorang yang benar - benar sudah mahir menggunakan GOOGLE dan juga mahir memilah dari hasil yang sudah diberikan GOOGLE.

Untuk calon programmer, ada skill tambahan yang perlu di kuasai setelah pandai memilah, yaitu tidak boleh takut untuk mencoba atas hasil yang sudah diberikan oleh GOOGLE (walaupun mungkin menyesatkan).

Selain itu, kenapa saya katakan ini adalah SKILL UTAMA yang harus dimiliki. Hal ini sangat mempengaruhi cara anda bertanya jawab di dalam suatu forum.

Ilustrasi :

PRO :
#Ask #Android Studio #RecyclerView
Permisi, saya ingin bertanya tentang RecyclerView, saya sedang mencoba untuk membuat event clik untuk setiap data yang akan di tampilkan oleh RecyclerView.
Saya sudah mencoba tutorial dari  tutorial ini, dan ini Namun masih tidak bisa. malah muncul NullPointerExeption.
Dan berikut ini Error yang dimunculkan.
Mohon bantuannya ya.


Ilustrasi :

SUPER NUB :
Om, bagi link tutorial RecYclerview donk.

Another one Ilustrasi :
The Power OF NUB :
Om, bagi source code Recyclerview donk.
Tenang, uang pulsa ada kok 10K.


Itu ada tiga contoh ilustrasi pertanyaan yang di lemparkan ke suatu forum yang sebenernya kurang lebih sama. hanya berbeda cara menyampaikannya. hanya saja, untuk mendapatkan pertanyaan yang nampak lebih baik, seperti pertanyaan yang pertama, Anda harus sudah menguasai skill GOOGLING dan add-on nya (Mencoba).

Coba renungkan, anda itu tipe yang mana ?

Jika anda sudah termasuk tipe yang pertama, selamat anda sudah termasuk menguasai skill GOOGLING.

Jika anda masuk ke kategori kedua dan ketiga. sebaiknya anda harus menguasai skill GOOGLING ini terlebih dahulu.


Halah, kebanyakan BACOT  omong doank !

Sepengalaman saya sebagai salah satu warga di suatu forum, walaupun bobot pertanyaannya dari 3 pertanyaan tadi, tapi yang akan di bantu di jawab adalah pertanyaan no 1.

Pertanyaan no 2 dan 3 akan di jawab, dengan jawaban : GOOGLING dulu sanah.
Palingan kalo lagi hoki aja pertanyaan no 2 dan 3 akan di jawab.

Ok, next
Benefit lainnya jika anda sudah menguasai skill ini, anda bisa menemukan solusi lebih cepat.

KENAPA ????

Ya banyangin aja, jika anda bertanya ke suatu forum dengan jumlah mencapai 1000 orang, anggap deh 800 orangnya sudah PRO semua, dari sisa 200 orang ini, apakah cuman anda yang akan bertanya ?
Tentu tidak, jika anda bertanya ke forum, pertanyaan anda bisa saja tertimbun dengan pertanyaan lain, dan lebih parahnya lagi, tertimbun oleh postingan yang tidak ada hubungannya di forum tersebut (link pemersatu bangsa misalnya). Nah selain itu, karena tipe pertanyaan yang anda tuliskan kemungkinan akan menjadi tipe 2 atau 3, maka para orang yang 800 tadi juga akan mengabaikan pertanyaan anda. Belum lagi jika ternyata di jawabnya setelah 1 jam anda bertanya, mngkin anda sudah lupa tadi bertanya apa.


Tapi jika anda sudah menguasai skill GOOGLING, anda tidak akan bertanya ke forum, anda akan langsung bertanya ke GOOGLE, dan mencoba, jika beruntung masalah anda akan langsung kelar, jika belum beruntung dan anda harus bertanya ke forum, maka pertanyaan anda akan menjadi pertanyaan dengan tipe no 1. Dan dengan pertanyaan tipe 1 ini, kemungkinan akan langsung di jawab akan sangat tinggi. 

Jadi gimana dengan skill ini ?
Masih mau mengabaikannya ?

Ok, semoga setelah membaca omongan dari Nub seperti saya ini, anda bisa menjadi lebih pro.
Silahkan tinggalkan saran dan komentar, supaya saya yang Nub ini bisa menjadi PRO juga.

Terimakasih banyak.

Thursday, February 14

February 14, 2019

Belajar Fragment

Udah lama gak nulis, kali ini entah kenapa ingin nulis lagi. Tulisan kali ini adalah tulisan tentang ilmu baru yang saya terima ketika mengikuti suatu acara. Iya acara yang pembicaranya adalah salah satu pemecah rekor DICODING, dengan menyelsaikan kelas KADE hanya 5 hari. Nah dia ini memberikan materi tentang Mengendalikan Fragment.

Ok, sebelumnya saya akan mencoba berbicara tentang Fragment. Pada umumnya ketika baru - baru belajar membuat Aplikasi Android, akan terbiasa dengan yang namanya Intent untuk berpindah dari satu Activity ke Activity lain.

Kenapa harus berpindah ?
Karena satu activity hanya memiliki sebuah layout. Yang artinya jika ingin ke tampilan lain, harus berpindah ke activity lain.

Ok, kembali ke Fragment.
Hal yang harus benar - benar di ingat adalah, FRAGMENT berjalan diatas Activity.
Karena Fragment berada diatas activity, dan sebuah activity bisa menjalankan banyak fragment maka hal ini memungkinkan kita hanya memerlukan sebuah activity untuk membuat banyak tampilan. Selain itu, perpindahan antar fragment terasa lebih smooth dibandingkan perpindahan antara Activity.

Ilustrasi Aplikasi yang akan dibuat

Ok, seperti yang terlihat pada gambar diatas. Ada sebuah activity yang diatasanya ada beberapa fragment (fragment 1, fragment 2 dan fragment 3).

Ok, ayo kita coba buat terlebih dahulu, sebuah project dengan empty activity dan 3 buah fragment.

Memilih template project

Menentukan nama project

Ok, jika sudah, maka akan otomatis muncul MainActivity.java dan xml nya. Ayo lanjutkan dengan membuat 1 buah package dan 3 buah fragment.

Membuat package

Saya membuat package dengan tujuan, supaya lebih rapi saja.
Caranya ? : kalau dari gambar diatas, klik kanan dizcoding.com.belajarfragment->new->packages.

Ok, di dalam package tadi, ayo kita buat 3 buah fragmentnya.
Cara yang saya lakukan adalah seperti ini
Klik kanan packages yang barusaja dibuat -> new -> Fragment -> Fragment(Blank).

sisanya ikuti gambar berikut.

Membuat Fragment baru

Jika sudah sesuai, silahkan klik finish.
dan lanjutkan dengan membuat FragmentDua dan FragmentTiga dengan cara yang sama seperti saat membuat FragmentSatu.
Berikut penampakannya setelah tiga buah fragment terbuat.

Setelah Fragment satu,dua, dan tiga terbuat

Ok, kita kembali sejenak ke layout MainActivity.
kita ubah isinya. Untuk contoh bisa mengikuti yang saya lakukan seperti berikut.

Membuat container di dalam activity_main.xml

Saya membuat sebuah Linear layout dengan id container. Tujuannya adalah, nantinya container ini akan di replace / di gantikan dengan layout yang ada di fragment, sehingga nantinya layout dari fragment bisa muncul di dalam Activity.

Selanjutnya,  ayo kita atur terlebih dahulu FragmentSatu. Di dalamnya saya ingin menambahkan Button. Lihat contoh berikut.

Mengatur layout fragment_satu

Ayo lakukan hal yang sama dengan layout FragmentDua. Ubah menjadi seperti berikut.

Mengatur layout fragment_dua

Dan Terakhir, ayo ubah layout FragmentTiga.
Cukup rubah textviewnya saja, supaya kita tau jika itu adalah fragmentTiga.

Mengatur layout fragment_tiga

Ok, selanjutnya ayo kita ke MainActivity.java

Membuat method commitFragment

Saya membuat sebuah method dengan nama commitFragment(Dengan parameter fragment).
Method ini saya buat untuk menghandle proses replace fragment atau proses untuk mengganti fragment yang sebelumnya dengan yang baru. Dimana fragment nanti akan menggantikan tempat R.id.container yang ada di dalam .xml main activity.

Selain itu juga saya membuat method dengan nama openFragmentSatu().
Method ini saya buat untuk mendefenisikan fragmentSatu, supaya nantinya jika ingin menampilkan fragmentSatu hanya tinggal memanggil fragment ini saja. Seperti contoh di dalam method oncreate, untuk menampilkan fragmentSatu, saya hanya memanggil method  openFragmentSatu di dalam method oncreate.


Test running openFragmentSatu
Jika aplikasi dicoba untuk di jalankan, maka akan menampilkan tampilan seperti gambar diatas.

Ok, kita lanjutkan dengan aksi, yaitu aksi untuk menampilkan fragmentdua jika tombol Show Fragment Dua di klik.

Untuk itu, mari kita lanjutkan dengan membuat listener terlebih dahulu. Tetapi sebelum itu, mari kita buat package dengan nama listeners. Lalu baru buat sebuah java class baru.

Membuat listener

Yup, seperti itulah listenernya jika sudah di buat. Disitu saya menggunakan int untuk nilai yang akan dikirim, nilai ini nantinya adalah nomor dari fragment. Untuk lebih jelasnya ayo lanjutkan dulu.

Kembali ke Main activity, dan implement listener yang baru saja dibuat ke dalam Mainactivity, Ini saya lakukan karena nantinya MainActivity akan menjadi pendengar, ketika ada yang mengirim atau memberikan aksi ke listener yang sudah dibuat.

Implementasi listener ke mainActivity

Ketika sudah di implement, maka nanti akan muncul method baru yang mengoverride method yang ada di dalam listener seperti pada gambar diatas.


Menambahkan method openFragmentDua dan Tiga

Masih di MainActivity, saya menambahkan beberapa method dan juga menambahkan kondisi di dalam override yang sebelumnya, dapat dilihat pada gambar diatas.

Ok, next ayo pindah ke FragmentSatu, karena didalamnya ada tombol yang akan menjalankan aksi, untuk berpindah ke fragmentDua. Untuk itu, saya merubah FragmentDua.java menjadi seperti berikut.

Membuat fragment supaya bisa memanggil listener

Yang perlu di perhatikan. karena untuk membuka FragmentDua kita perlu berbisik terlebih dahulu ke MainActivity, maka kita harus mengetahui jika ternyata MainActivity ingin mendengarkan bisikan dari FragmentDua. caranya adalah dengan cara, MainActivity mengirimkan object listener ke dalam fragmentSatu (untuk itulah kenapa saya membuat method setFragment). Lalu di dalam override onclick. saya membuat fragment untuk berbisik kepada MainActivity melalui object listener, dan membisikkan angka 2. yang artinya nanti ketika MainActivity mendengar, akan mengeksekusi angka 2 (yaitu membuka fragmentDua).

Ayo kembali terlebih dahulu ke MainActivity, karena kita perlu membuat MainActivity mengirimkan object listener kedalam FragmentSatu.

Meminta Activity mengirimkan object listener ke fragmentSatu

Saya mengirimkan parameter listener kedalam method setFragment yang ada di fragmentSatu. Jika anda bertanya kenapa parameternya this ?, karena class MainActivity sudah implemen object FragmentNavigationListener.

Ok, sampai disini jika di coba untuk di jalankan, seharusnya sudah berjalan. (tapi hanya sampai menampilkan fragmentDua saja).

Ok, lanjutkan ke FragmentDua, kita lakukan hal yang sama seperti pada fragmentSatu.

Membuat fragment supaya bisa memanggil listener

Sama seperti FragmentSatu, di FragmentDua juga saya melakukan hal yang sama. bisa dilihat pada gambar diatas.
Dan kita kembali ke MainActivity, untuk membuat MainActivity mengirimkan object listener ke dalam fragmentDua. seperti berikut.

Meminta Activity mengirimkan object listener ke fragmentSatu

Ok, berikut preview dari semua kodingannya jika di jalankan.




Selesai, yey, project kecil ini akhirnya selesai.
Silahkan tinggalkan kritik dan sarannya pada kolom komentar dibawah.

Oh iya, ini saya lampirkan link git dari project yang baru saja dibuat. Link Project

TERIMAKASIH BANYAK

Friday, November 30

November 30, 2018

Menentukan Jenis Operator dari No HP (Android Studio)


Selamat datang di tulisan pertama saya tentang pemrograman android. Pada tulisan kali ini, saya sedang belajar untuk menentukan jenis operator dari suatu no seluler.

Seperti yang sudah kita ketahui, bahwa sistem penomoran no hp di indonesia itu cukup sederhana, yaitu kita bisa menentukan jenis suatu operator hanya dari beberapa nomor awalnya saja.

Ok, langsung aja yuk
Ok, awal sih sama saja seperti biasa,  buat project baru, dan pilih yang empty activiti saja

Diluar method oncreate, saya membuat method baru, dengan nama getData()

    Map<String, String> getData(){
        Map<String,String> operator = new HashMap<>();
        operator.put("62811","Telkomsel");
        operator.put("62812","Telkomsel");
        operator.put("62813","Telkomsel");
        operator.put("62821","Telkomsel");
        operator.put("62822","Telkomsel");
        operator.put("62823","Telkomsel");
        operator.put("62851","Telkomsel");
        operator.put("62852","Telkomsel");
        operator.put("62853","Telkomsel");
        operator.put("62814","Indosat");
        operator.put("62815","Indosat");
        operator.put("62816","Indosat");
        operator.put("62855","Indosat");
        operator.put("62856","Indosat");
        operator.put("62857","Indosat");
        operator.put("62858","Indosat");
        operator.put("62817","XL / Axis");
        operator.put("62818","XL / Axis");
        operator.put("62819","XL / Axis");
        operator.put("62859","XL / Axis");
        operator.put("62877","XL / Axis");
        operator.put("62878","XL / Axis");
        operator.put("62879","XL / Axis");
        operator.put("62831","XL / Axis");
        operator.put("62833","XL / Axis");
        operator.put("62835","XL / Axis");
        operator.put("62836","XL / Axis");
        operator.put("62837","XL / Axis");
        operator.put("62838","XL / Axis");
        operator.put("62839","XL / Axis");
        operator.put("6288","Smartfren");
        operator.put("62899","Three");
        operator.put("62898","Three");
        operator.put("62897","Three");
        operator.put("62896","Three");
        operator.put("62895","Three");
        operator.put("62894","Three");
        operator.put("62893","Three");
        return operator;
    }

Setelah itu saya juga membuat method baru lagi, dengan nama cekOp()

Berikut kode yang saya tambahkan.
    String cekOp(String pref){
        String ret ="";
        Map<String, String> operator = getData();
        for (Map.Entry<String,String> entry : operator.entrySet()){
            if (pref.equalsIgnoreCase(entry.getKey())){
                ret = entry.getValue();
            }
        }
        if (ret.equalsIgnoreCase("")){
            ret = "Tidak ditemukan";
        }
        return ret;
    }
Kode tersebut saya gunakan untuk melakukan pengecekan dari data yang sudah di buat di method yang sebelumnya, yaitu method getData();

Cara yang saya lakukan adalah, dengan cara menyamakan antara key dari data yang dibuat sebelumnya dengan data yang di masukkan ke dalam parameter pref.

Jika datanya sama, maka akan memberikan nilai return berupa nama operatornya.

Tahap selanjutnya saya membuat form pada file activity_main.xml untuk memasukkan nomor, lalu saya juga membuat sebuah button untuk menjalankan perintah cek nomor yang di masukkan dan sebuah text view untuk menampilkan jenis operatornya.

Berikut isi dari file .xml yang saya buat.

<?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/up"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <EditText
            android:id="@+id/phone"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="phone" />
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cek" />
    </LinearLayout>
    <LinearLayout
        android:layout_centerVertical="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/operator"
            android:text="Test"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

</RelativeLayout>

Ok, kembali lagi pada file MainActivity.java
Karena pada file .xml nya sudah di tambahkan beberapa element, maka kita perlu mendefinisikan element - element tersebut di MainActivity.java tersebut.
Saya mendefinisikan nya langsung di dalam method onCreate seperti berikut.

        final EditText no = findViewById(R.id.phone);
        Button button = findViewById(R.id.button);
        final TextView hasil = findViewById(R.id.operator);


Lalu saya juga membuat action onclick supaya nanti ketika button di klik, akan menjalankan pengecekan kepada nomor yang telah diberikan.

Masih di dalam onCreate, saya membuat onclik seperti berikut
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String noHp = no.getText().toString();
                if (noHp.length() > 4){
                    noHp = noHp.substring(0,5);
                }
                hasil.setText(cekOp(noHp));
            }
        });

Pada code diatas, saya membuat kondisi, jika panjang karakter dari nomor yang dimasukkan lebih dari 4, maka akan di potong dan di ambil hanya 5 karakter awalnya saja.

Lalu saya tampilkan hasilnya pada textview.

Sampai pada tahap ini, project sudah bisa di test, dan seharusnya sudah bisa melakukan pengecekan jenis operator berdasarkan nomor yang di masukkan.

Tetapi : ada beberapa kasus yang tidak sesuai
1. ketika di masukkan no dengan awal 0 , ie : 0823888 maka tidak akan ditemukan jenis operatornya.
2. ketika nomor yang di masukkan adalah nomor dengan operator smartfren maka tidak akan ditemukan juga jenis operatornya.

Penyebab pada no 1 adalah, karena ketika di cek, tidak ada nomor yang awalnya 0 pada data yang sudah di buat.
Lalu solusinya bagaimana ?
Cara yang saya lakukan adalah :
1. jika pengguna memasukkan angka 0 pada awal karakter, maka akan saya replace angka 0 tersebut dengan angka 62.

Kode pada onclik akan menjadi seperti ini jika algoritma tersebut saya lakukan.

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String noHp = no.getText().toString();
                if (noHp.length() > 4){
                    // jika panjang karakter lebih dari 4
                    if (noHp.substring(0,1).equalsIgnoreCase("0")){
                        // jika karakter pertamanya adalah 0
                        // maka replace angka 0 tersebut dengan 62
                        noHp = noHp.replace("0","62");
                    }
                    noHp = noHp.substring(0,5);
                }
                hasil.setText(cekOp(noHp));
            }
        });

Lalu bagaimana pada penyebab dari masalah no 2 ?
Penyebabnya adalah karena panjang karakter yang di cek adalah 5 karakter, sedangkan pada data yang merupakan data Smartfren, hanya ada 4 karakter yang diperlukan untuk dilakukan pengecekan.

Lalu bagaimana solusinya ?
Solusi yang saya tawarkan adalah seperti berikut :

Cek, apakah nomor yang diberikan mengandung 6288, jika iya, maka potong nomor yang diberikan tersebut, dan hanya ambil 4 karakter saja.
Jika tidak mengandung 6288 maka potong dan ambil 5 karakter saja.

Berikut full kode dari onclick setelah saya tambahkan algoritma yang baru saja saya bahas.

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String noHp = no.getText().toString();
                if (noHp.length() > 4){
                    // jika panjang karakter lebih dari 4
                    if (noHp.substring(0,1).equalsIgnoreCase("0")){
                        // jika karakter pertamanya adalah 0
                        // maka replace angka 0 tersebut dengan 62
                        noHp = noHp.replace("0","62");
                    }
                    if (noHp.contains("6288")){
                        noHp = noHp.substring(0,4);
                    }
                    else{
                        noHp = noHp.substring(0,5);
                    }
                }
                hasil.setText(cekOp(noHp));
            }
        });

Selesai, yey, project kecil ini akhirnya selesai.
Silahkan tinggalkan kritik dan sarannya pada kolom komentar dibawah.

Oh iya, ini saya lampirkan link git dari project yang baru saja dibuat. Link Project

Terimakasih banyak....