LAPORAN PRAKTIKUM PEMROGRAMAN MOBILE PERTEMUAN 14 Tentang Aplikasi dengan Database (MySQL)

LAPORAN PRAKTIKUM
PEMROGRAMAN MOBILE
PERTEMUAN 14





Di susunOleh :
Nama    : Firman Agus Saputro
                                              NIM       : 163310023
                                              Jurusan : TEKNIK KOMPUTER


SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER
STMIK AKAKOM
YOGYAKARTA
2018



PERTEMUAN KE – 14
Aplikasi dengan Database (MySQL)
          I.            TUJUAN
Mahasiswa diharapkan dapat memahami dan mengetahui tentang komponen widget,
yaitu Webservice, mysql dan json yang digunakan pada aplikasi mobile.

        II.            PEMBAHASAN
Pada praktikum kali ini kita akan membuat sebuah aplikasi yang digunakan untuk mengakses sebuah database menggunakan MySQL. Untuk itu sebelum memulai praktikum kita harus membuat sebuah database terlebih dahulu . karena MySQL hanya bersifat lokal sehingga untuk mengakses MySQL kita harus satu jaringan dengan pc MySQL tersebut. Berikut adalah penjelasan program aplikasi yang telah saya buat :

  1.          Membuat interface activity_main.xml

<?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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.firman.myapplication.MainActivity"
>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:layout_below="@+id/editnama"
        android:layout_alignParentStart="true"
        android:layout_marginTop="18dp"
        android:id="@+id/editpenerbit"
        android:hint="menampilkan penerbit"
/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:layout_below="@+id/editpenerbit"
        android:layout_alignParentStart="true"
        android:layout_marginTop="22dp"
        android:id="@+id/edittahun"
        android:hint="menampilkan tahun"
/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/edit_id"
        android:hint="masukkan id"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/editnama"
        android:hint="menampilkan nama"
        android:layout_below="@+id/btn_tampil"
        android:layout_alignParentStart="true"
        android:layout_marginTop="12dp"
/>

    <Button
        android:text="TAMPILKAN"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn_tampil"
        android:onClick="tampilkan"
        android:layout_below="@+id/edit_id"
        android:layout_alignParentStart="true"
        android:layout_marginTop="22dp"
/>
</RelativeLayout>
Penjelasan :
Pada interface ini saya menggunakan 1 komponen widget edit  text yang akan digunakan untuk menginputkan id dari fild yang akan ditampilkan datanya , selain itu saya mnambahkan satu buah komponen button sebagai tombol untuk menampilkan data pada database yang ingin ditampilkan dan untuk menampilkan data pada masing-masing fild saya akan menampilkanya pada 3 buah komponen edit text.

  1. 2     Menambahkan script java pada Main_activity.java

package com.firman.myapplication;

  

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;//untuk menghandle atau deklarasi untuk elemen yang akan digunakan pada fungsi java yang akan dibuat, import activity digunakan agar mengetahui dimana activity elemen yang sudah di deklarasikan akan dipanggil.

public class MainActivity extends AppCompatActivity {
Button tampil;
private String url1 = "http://172.18.106.151/api/api_perpustakaan.php/data/";//merupakan deklarasi url yang berisi alamat api yang akan digunakan dimana alamat api diatas merupakan database yang telah kita buat tadi dan alamat ip 172.18.106.151 merupakan  alamat ip dari pc MySQL server. 

  

EditText ID,NAMA,PENERBIT,TAHUN;
private HandleJSON obj;
//merupakan deklarasi variabel dari komponen-komponen widget

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tampil =(Button)findViewById(R.id.btn_tampil);
ID = (EditText) findViewById(R.id.edit_id);
NAMA = (EditText) findViewById(R.id.editnama);
PENERBIT = (EditText) findViewById(R.id.editpenerbit);
TAHUN = (EditText) findViewById(R.id.edittahun     );}//merupakan objek-objek  yang akan  digunakan untuk mengakses nilai dari komponen-komponen widget yang digunakan berdasarkan id nya masing-masing
public void tampilkan(View view) {
//method dengan nama tampil yang akan digunakan untuk menampilkan data pada database
if (ID.getText().toString().isEmpty()) {
Toast.makeText(getApplicationContext(), "ID Tidak boleh kosong", Toast.LENGTH_SHORT).show();
//untuk mengecek apakah ID yang dimasukkan kosong jika kosong maka akan terdapat notifikasi ID Tidak boleh kosong
}else{
//jika ID nya tidak kosong maka statement dibawah ini akan dikerjakan
String url = ID.getText().toString().trim();
String finalUrl = url1 + url ;
//variabel finalUrl berisi variabel url1 yang digabung dengan variabel url
obj = new HandleJSON(finalUrl);
//objek untuk memanggil kelas HandleJSON dengan parameter berisi variabel finalUrl
 obj.fetchJSON();
//untuk memanggil method fetchJSON() kedalam objek dimana Data yang diperoleh biasanya berbentuk JSON dan kita dapat memanfaatkan library dari FastJSON ini untuk melakukan konversi JSON tersebut.
while (obj.parsingComplete) ;
ID.setText(obj.getID());

NAMA.setText(String.valueOf(obj.getNAMA()));
PENERBIT.setText(obj.getPENERBIT() );
TAHUN.setText(obj.getTAHUN());//sebuah perulangan yang digunakan untuk menampilkan nilai dari variabel-variabel yang didapat dari proses yang dilakukan oleh objek dengan nama obj diatas.

    } }}

3.       Menambahkan sebuah kelas baru dengan nama Kelas handelJSON
Kelas HandleJSON ini nantinya akan dipanggil kedalam kelas Main_activity.java
import org.json.JSONArray;import org.json.JSONObject;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;//untuk menghandle atau deklarasi untuk elemen yang akan digunakan pada fungsi java yang akan dibuat, import activity digunakan agar mengetahui dimana activity elemen yang sudah di deklarasikan akan dipanggil.


public class HandleJSON {private String id = "id";private String nama = "nama";private String penerbit = "penerbit";private String tahun = "tahun";private String urlString = "null";public volatile boolean parsingComplete = true;
//merupakan deklarasi variabel
public HandleJSON(String url){this.urlString = url;}public String getID(){return id;}public String getNAMA(){return nama;}public String getPENERBIT(){return penerbit;}public String getTAHUN(){return tahun;}
//method-method diatas berfungsi untuk mengembalikan nilai dari masing-masing variabel

  public void readAndParseJSON(String in){

        try{
JSONObject reader = new JSONObject(in);
JSONArray data = reader.getJSONArray("data");
JSONObject DataBuku = data.getJSONObject(0);//pembuatan objek untuk mengakses JSONObject pada yang didapat dari url http://172.18.106.151/api/api_perpustakaan.php/data/ dimana JSONObjek adalah sepasang nama/nilai yang tidak terurutkan. JSONObjek dimulai dengan { (kurung kurawal buka)dan diakhiri dengan } (kurung kurawal tutup). Setiap nama diikuti dengan : (titik dua) dan setiap pasangan nama/nilai dipisahkan oleh , (koma).

  

id= DataBuku.getString("id");nama = DataBuku.getString("nama");penerbit= DataBuku.getString("penerbit");tahun = DataBuku.getString("tahun");parsingComplete = false;
//merupakan pemberian nilai pada variabel berdasarkan letak nilai tersebut pada objek dimana nilai Nilai (value) dapat berupa sebuah string dalam tanda kutip ganda, atau angka, atau true atau false atau null, atau sebuah objek atau sebuah larik.
}catch (Exception e){
e.printStackTrace();
}}

  public void fetchJSON(){
Thread thread = new Thread(new Runnable(){

public void run(){

                try{

                    URL url = new URL(urlString);

                    HttpURLConnection conn = (HttpURLConnection)

                            url.openConnection();

                    conn.setReadTimeout(10000/*miliseconds*/);

                    conn.setConnectTimeout(15000/*miliseconds*/);

                    conn.setRequestMethod("GET");

                    conn.setDoInput(true);

                    conn.connect();

                    InputStream stream = conn.getInputStream();

                    String data = convertStreamToString(stream);

                    readAndParseJSON(data);

                    stream.close();

                }catch(Exception e){

                    e.printStackTrace();

                }

            }

        });

        thread.start();

    }

  

    private String convertStreamToString(java.io.InputStream is) {

  // TODO Auto-generated method stub

        java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");

        return s.hasNext() ? s.next() : "";

    }

}

4.       Menambahkan sebuah permission pada Kelas manifest.xml
<uses-permission android:name="android.permission.INTERNET" />

   //permission tersebut akan berguna untuk memberikan akses kepada aplikasi yang telah kita buat ke internet   

Berikut adalah Hasilnya :




      III.            PEMBAHASAN LATIHAN :
Pada latihan kali ini saya akan menambahkan sebuah tombol button yang akan digunakan untuk menampilkan seluruh isi dari database yang telah saya buat. Berikut adalah benjelasan dari scribt yang saya buat :
1.       Menambahkan tombol button pada interface activity_main.xml
<Button
   
android:text="TAMPILKAN SEMUA"
   
android:layout_width="wrap_content"
   
android:layout_height="wrap_content"
   
android:layout_below="@+id/edittahun"
   
android:layout_alignEnd="@+id/btn_tampil"
   
android:layout_marginTop="20dp"
   
android:id="@+id/btnsemua" />
Penjelasan :
Pada praktikum kali ini saya menambahkan sebuah komponen widget button yang akan berfungsi sebagai tombol untuk  menampilkan semua data yang disimpan pada database .
2.       Menambahkan scribt java pada  main_activity.java
Pada kelas ini saya menambahkan sebuah intent  dimana intent merupakan suatu pesan yang digunakan untuk mengaktifkan tiga komponen dasar pada aplikasi Android yaitu Activity, Service, dan Broadcast Receiver. Aktifasi pada komponen-komponen tersebut bisa terjadi pada aplikasi yang sama atau berbeda, seperti menjalankan Activity, inisiasi Service, atau pengiriman pesan kepada Broadcast Receiver. Pada saat terjadi komunikasi antar komponen, Intent menyimpan paket informasi yang digunakan pada proses tersebut.berikut adalah scribtnya :
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
Button tampil,tmplsemua;
private String url1 = "http://172.18.106.151/api/api_perpustakaan.php/data/";
EditText ID,NAMA,PENERBIT,TAHUN;
private HandleJSON obj;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tampil =(Button)findViewById(R.id.btn_tampil);

ID = (EditText) findViewById(R.id.edit_id);
NAMA = (EditText) findViewById(R.id.editnama);
PENERBIT = (EditText) findViewById(R.id.editpenerbit);
TAHUN = (EditText) findViewById(R.id.edittahun     );

tmplsemua =(Button)findViewById(R.id.btnsemua);
//saya menambahkan sebuah objek dengan nama tmplsemua yang digunakan untuk mengakses nilai dari komponen  widget button yang telah saya tambahkan
tmplsemua.setOnClickListener(new View.OnClickListener() {
//saya juga menambahkan sebuah event untuk tombol button yang saya tambahkan ketika diklik
        public void onClick(View arg0) {
Intent keli = new Intent(MainActivity.this,Main2Activity.class);
//saya juga menambahkan sebuah objek untuk memanggil kelas Intent yang akan digunakan untuk berpindah kehalam Main2Activity
startActivity(keli);
//untuk memulai intent
        }
    });
}
    public void tampilkan(View view) {
        if (ID.getText().toString().isEmpty()) {
            Toast.makeText(getApplicationContext(), "ID Tidak boleh kosong", Toast.LENGTH_SHORT).show();
        }else{
            String url = ID.getText().toString().trim();
        String finalUrl = url1 + url ;

        obj = new HandleJSON(finalUrl);
        obj.fetchJSON();
        while (obj.parsingComplete) ;
       ID.setText(obj.getID());
        NAMA.setText(String.valueOf(obj.getNAMA()));
        PENERBIT.setText(obj.getPENERBIT() );
        TAHUN.setText(obj.getTAHUN());

    }
    }
}

3.       Menambahkan interface baru yang akan dipanggil oleh intent
<?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:id="@+id/activity_main2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.firman.myapplication.Main2Activity"
>

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:id="@+id/list_semua"
/>
</RelativeLayout>
Penjelasan:
Pada interface Main2Activity.xml ini berisi komponen widget list view yang akan digunakan untuk menampilkan seluruh isi dari database yang telah kita buat kedalam bentuk list

4.       Menambahkan scribt java pada intervace baru
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;

import static android.os.Build.ID;

public class Main2Activity extends AppCompatActivity {
   
private String url1 = "http://172.18.106.151/api/api_perpustakaan.php/data/";
   
private HandleJSON obj;
    ArrayList<HashMap<String,String>>
data;
   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView(R.layout.
activity_main2);
       
obj = new  HandleJSON(url1);
       
data = new ArrayList<>();
       
obj.fetchJSON();
       
while(obj.parsingComplete);
        String[] id;
        String[] nama;
        String[] penerbit;
        String[] tahun;
         //merupakan deklarasi variabel array
       
int i=0;
       
while (i<2) {
//Perulangan untuk menampilkan data dari variabel array dengan persyarataan yaitu nilai dari variabel i lebih kecil dari 2
            HashMap<String, String> isi =
new HashMap<>();

            isi.put(
"id", id[i]);
            isi.put(
"cuaca", cuaca[i]);
            isi.put(
"tekanan", tekanan[i]);
            isi.put(
"suhu", suhu[i].toString());

           
data.add(isi);
            i++;

        }
        ListAdapter adapt =
new SimpleAdapter(Main2Activity.this, data, R.layout.activity_list__view,
               
new String[]{"id","cuaca","tekanan","suhu"},
               
new int[]{R.id.tanggal, R.id.cuaca, R.id.tekanan, R.id.suhu});
        ListView listView = (ListView) findViewById(R.id.ListCuaca);
        listView.setAdapter(adapt);

        listView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
           
@Override
           
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent detail =
new Intent(Main2Activity.this, Main3Activity.class);
detail.putExtra(
"tgl", ((TextView) view.findViewById(R.id.tanggal)).getText().toString());
                detail.putExtra(
"cuaca", ((TextView) view.findViewById(R.id.cuaca)).getText().toString());
                detail.putExtra(
"tekanan", ((TextView) view.findViewById(R.id.tekanan)).getText().toString());
                detail.putExtra(
"suhu", ((TextView) view.findViewById(R.id.suhu)).getText().toString());
                startActivity(detail);} }); }}

     IV.            KESIMPULAN :
Dari praktikum tersebut dapat disimpulkan bahwa :
·         untuk membuat sebuah project aplikasi android yang menggunakan komunikasi dari REST API webservice ke Android client (aplikasi) via koneksi internet. Data yang diperoleh berbentuk JSON dan untuk menampilkan hasil data yang didapat dari REST API webservice ke dalam aplikasi kita harus mengetahui struktur dari JSON wab service itu sendiri.
·         Untuk menambahkan sebuah halaman baru yang akan digunakan untuk menampilkan informasi mengenai  seluruh isi dari database yang telah kita buat kita harus menggunakan sebuah intent dimana intent tersebut akan mengarahkan kita ke halaman tertentu.


0 Response to "LAPORAN PRAKTIKUM PEMROGRAMAN MOBILE PERTEMUAN 14 Tentang Aplikasi dengan Database (MySQL)"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel