Tutorial Android PHP dan MySQL

Jumpa lagi dengan Agus Haryanto dalam seri Tutorial Android. Sebelumnya terimakasih kepada para pembaca yang sudah merekomendasikan blog ini sebagai salah satu blog favorit untuk tutorial android. Tutorial Kali ini akan membahas tentang Android PHP dan MySQL.
Android oh android kau membuatku semakin ingin memaksimalkan kemampuanmu. Ku bertanya dalam hati apakah engkau dapat mengakses database yang ada diserver, kalau bisa alangkah indahnya, mungkin seindah pergi kepulau komodo walaupun aku sendiri belum pernah kesana :), tetapi aku dapat merasakan keindahannya melalui gambar-gambar diinternet. Wah maaf jadi ngelanturnih.

Antara Jakarta dan Pulau Komodo terbentang jarak yang luas, kita harus melewati daratan dan menyeberangi lautan. Tapi tenang sekarang sudah ada Pesawat Terbang, kita bisa cepat tiba disana

Begitu juga dengan Handset android dengan database server terbentang jarak yang luas bergantung dari letak server kita. Untuk yang satu ini juga tidak perlu khawatir karena ada jaringan internet yang bisa menghubungkan handset android dengan database diserver.

Yang pernah bergaul dengan Aplikasi web database. Tentunya tidak asing dengan PHP dan MySQL.

Yang suka ngeblog tahukan wordpress. WordPress dibangun dengan menggunakan PHP dan MySQL.

Mungkin ada yang tidak sadar dengan Browser yang ada dilaptop kita dapat terhubung ke database MySQL yang tersimpan pada server yang jaraknya jauh dengan kita, semua itu dapat terwujud karena adanya jaringan Internet.

Laptop dengan Handset Android adalah sama, yaitu client dari suatu server, yang berarti dari handset android kita bisa mengakses file PHP yang ada diserver.

Oke untuk praktek kita kali ini kita  akan membuat daftar harga menu makanan, yang datanya diinputkan dari aplikasi android dan ditampilkan juga diaplikasi android  tersebut.

Langkah pertama adalah siapkan database beserta tablenya.

01CREATE DATABASE db_makanan;
02 
03CREATE TABLE tbl_makanan (
04id INT(4) NOT NULL AUTO_INCREMENT,
05nama_makanan VARCHAR(32) NOT NULL,
06harga INT(10) NOT NULL,
07PRIMARY KEY (id)
08)
09ENGINE=MyISAM;
10 
11insert into tbl_makanan values(null,'ayam bakar',12000);
12insert into tbl_makanan values(null,'ayam goreng',11000);
13insert into tbl_makanan values( null,'ikan bakar',12000);

Oke karena aplikasi  android kita ini nantinya bisa memiliki fitur :

  1. Tambah data makanan
  2. Menampilkan data makanan yang telah diinputkan.

Untuk itu kita perlu membuat file PHP untuk menerima data dari android untuk dimasukkan ke dalam database, simpan dengan nama addmakanan.php

01<?php
02$nama = $_GET['nama'];
03$harga = $_GET['harga'];
04 
05$link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB');
06mysql_select_db('db_makanan', $link) or die('Cannot select the DB');
07 
08/* grab the posts from the db */
09$query = "insert into tbl_makanan (nama_makanan,harga) values('".$nama."',".$harga.")";
10$result = mysql_query($query, $link) or die('Error query:  '.$query);
11echo "SUCCESS";
12 
13?>

Buat juga file php untuk menampilkan daftar makanan yang telah kita inputkan, simpan dengan nama daftarmakanan.php

01<?php
02$link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB');
03mysql_select_db('db_makanan', $link) or die('Cannot select the DB');
04 
05/* grab the posts from the db */
06$query = "SELECT nama_makanan, harga FROM tbl_makanan";
07$result = mysql_query($query, $link) or die('Errorquery:  '.$query);
08 
09$rows = array();
10while ($r = mysql_fetch_assoc($result)) {
11    $rows[] = $r;
12}
13$data = "{makanan:".json_encode($rows)."}";
14echo $data;
15?>

Dari file di atas dapat dilihat bahwa server akan mengirimkan data ke client dalam bentuk JSON.

Untuk membuktikannya, mari kita coba dibrowser, dengan memasukkan address

http://localhost/android/daftarmakanan.php

Sekarang android time
1. Buat  Project Baru dengan nama AndroidJSON

2. Mari kita Buat layout untuk  Tambah Data, simpan dengan nama tambah.xml


01<?xml version="1.0" encoding="utf-8"?>
02<?xml version="1.0" encoding="utf-8"?>
03<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
04    android:orientation="vertical" android:layout_width="fill_parent"
05    android:layout_height="fill_parent">
06    <TextView android:text="Nama Makanan :" android:id="@+id/TextView01"
07        android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
08    <EditText android:text="" android:id="@+id/txtNama"
09        android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText>
10    <TextView android:text="Harga :" android:id="@+id/TextView02"
11        android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
12    <EditText android:text="" android:id="@+id/txtHarga"
13        android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText>
14    <Button android:text="Simpan" android:id="@+id/btnSimpan"
15        android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
16</LinearLayout>

3.Buat juga Layout untuk menampilkan daftar harga makanan, simpan dengan nama daftarmakanan.xml

01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:orientation="vertical" android:layout_width="fill_parent"
04    android:layout_height="fill_parent">
05 
06    <TextView android:layout_width="fill_parent"
07        android:layout_height="wrap_content" android:text="Baca Data Dari server dengan JSON" />
08    <TextView android:layout_width="fill_parent"
09        android:layout_height="wrap_content" android:text="Daftar Makanan" />
10    <TextView android:layout_width="fill_parent" android:id="@+id/TextViewResult"
11        android:layout_height="wrap_content" android:text="Hasil JSON" />
12</LinearLayout>

4. Sekararang Mari kita buat Menu dari aplikasi ini, yang didalamnya terdapat navigasi

untuk masuk ke Form Tambah,

ke Daftar Makanan dan keluar Aplikasi. Edit File MainActivity.java

01package com.agus.android.php;
02 
03/**
04 * Class InsertActivity
05 * @version 1.0 Dec 18, 2011
06 * @author Agus Haryanto (agus.superwriter@gmail.com)
08 */
09 
10import android.app.ListActivity;
11import android.content.Intent;
12import android.os.Bundle;
13import android.view.View;
14import android.widget.ArrayAdapter;
15import android.widget.ListView;
16import android.widget.Toast;
17 
18public class MainActivity extends ListActivity {
19    /** Called when the activity is first created. */
20    @Override
21    public void onCreate(Bundle icicle) {
22        super.onCreate(icicle);
23 
24        // Create an array of Strings, that will be put to our ListActivity
25        String[] menu = new String[] { "Tambah Data", "Tampilkan Data", "Exit" };
26        // Create an ArrayAdapter, that will actually make the Strings above
27        // appear in the ListView
28        // Menset nilai array ke dalam list adapater sehingga data pada array
29        // akan dimunculkan dalam list
30        this.setListAdapter(new ArrayAdapter<String>(this,
31                android.R.layout.simple_list_item_1, menu));
32    }
33 
34    @Override
35    /**method ini akan mengoveride method onListItemClick
36     * yang ada pada class List Activity
37     * method ini akan dipanggil apabilai ada salah satu item
38     * dari list menu yang dipilih
39     */
40    protected void onListItemClick(ListView l, View v, int position, long id) {
41        super.onListItemClick(l, v, position, id);
42        // Get the item that was clicked
43        Object o = this.getListAdapter().getItem(position);
44        String pilihan = o.toString();
45        tampilkanPilihan(pilihan);
46    }
47 
48    protected void tampilkanPilihan(String pilihan) {
49        try {
50            Intent i = null;
51            if (pilihan.equals("Tambah Data")) {
52                i = new Intent(this, InsertActivity.class);
53            } else if (pilihan.equals("Tampilkan Data")) {
54                i = new Intent(this, JSONActivity.class);
55            } else if (pilihan.equals("Exit")) {
56                finish();
57            } else {
58                Toast.makeText(this,"Anda Memilih: " + pilihan + " , " +
59                        "Actionnya belum dibuat", Toast.LENGTH_LONG).show();
60            }
61            startActivity(i);
62        } catch (Exception e) {
63            e.printStackTrace();
64        }
65    }
66}

5. Sekarang Bagian Form Tambah Datanya, Buat Class baru dengan nama InsertActivity.java.

001package com.agus.android.php;
002 
003/**
004 * Class InsertActivity
005 * @version 1.0 Dec 18, 2011
006 * @author Agus Haryanto (agus.superwriter@gmail.com)
007 * @website http://agusharyanto.net
008 */
009 
010import java.io.BufferedReader;
011import java.io.InputStream;
012import java.io.InputStreamReader;
013import java.io.UnsupportedEncodingException;
014import java.net.URLEncoder;
015 
016import org.apache.http.HttpResponse;
017import org.apache.http.client.HttpClient;
018import org.apache.http.client.methods.HttpGet;
019import org.apache.http.impl.client.DefaultHttpClient;
020 
021import android.app.Activity;
022import android.os.Bundle;
023import android.view.View;
024import android.widget.Button;
025import android.widget.EditText;
026import android.widget.Toast;
027 
028public class InsertActivity extends Activity {
029    private EditText txtNama;
030    private EditText txtHarga;
031 
032    private Button btnSimpan;
033    // Seusuaikan url dengan nama domain yang anda gunakan
034    private String url = "http://10.0.2.2/android/addmakanan.php";
035 
036    /**
037     * Method yang dipanggil pada saat aplikaasi dijalankan
038     * */
039    @Override
040    public void onCreate(Bundle savedInstanceState) {
041 
042        super.onCreate(savedInstanceState);
043        setContentView(R.layout.tambah);
044        txtNama = (EditText) findViewById(R.id.txtNama);
045        txtHarga = (EditText) findViewById(R.id.txtHarga);
046 
047        btnSimpan = (Button) findViewById(R.id.btnSimpan);
048        // daftarkan even onClick pada btnSimpan
049        btnSimpan.setOnClickListener(new Button.OnClickListener() {
050            @Override
051            public void onClick(View v) {
052 
053                try {
054                    // setiap parameter yang akan dikirim melalui http
055                    // harus encode agar
056                    // dapat terbaca dengan baik oleh server
057                    String nama = URLEncoder.encode(txtNama.getText()
058                            .toString(), "utf-8");
059                    String harga = URLEncoder.encode(txtHarga.getText()
060                            .toString(), "utf-8");
061                    url += "?nama=" + nama + "&harga=" + harga;
062                    getRequest(url);
063                } catch (UnsupportedEncodingException e) {
064                    // TODO Auto-generated catch block
065                    e.printStackTrace();
066                }
067 
068            }
069        });
070 
071    }
072 
073    /**
074     * Method untuk Mengirimkan data kes erver event by button login diklik
075     *
076     * @param view
077     */
078    public void getRequest(String Url) {
079        Toast.makeText(this, "Tambah Data " + Url + " ", Toast.LENGTH_SHORT)
080                .show();
081        HttpClient client = new DefaultHttpClient();
082        HttpGet request = new HttpGet(url);
083        try {
084            HttpResponse response = client.execute(request);
085            Toast.makeText(this, "Tambah Data " + request(response) + " ",
086                    Toast.LENGTH_SHORT).show();
087        } catch (Exception ex) {
088            Toast.makeText(this, "Tambah Data Gagal !", Toast.LENGTH_SHORT)
089                    .show();
090        }
091 
092    }
093 
094    /**
095     * Method untuk Menenrima data dari server
096     *
097     * @param response
098     * @return
099     */
100    public static String request(HttpResponse response) {
101        String result = "";
102 
103        try {
104            InputStream in = response.getEntity().getContent();
105            BufferedReader reader = new BufferedReader(
106                    new InputStreamReader(in));
107            StringBuilder str = new StringBuilder();
108            String line = null;
109            while ((line = reader.readLine()) != null) {
110                str.append(line + "\n");
111            }
112            in.close();
113            result = str.toString();
114        } catch (Exception ex) {
115            result = "Error";
116        }
117        return result;
118    }
119 
120}


6. Waktunya kita buat Class untuk menampilkan data dari server dalam bentuk JSON,
buat class baru dengan nama JSONActivity.java

001package com.agus.android.php;
002 
003/**
004 * Class JSONActivity
005 * @version 1.0 Dec 18, 2011
006 * @author Agus Haryanto (agus.superwriter@gmail.com)
007 * @website http://agusharyanto.net
008 */
009 
010import java.io.BufferedReader;
011import java.io.InputStream;
012import java.io.InputStreamReader;
013 
014import org.apache.http.HttpResponse;
015import org.apache.http.client.HttpClient;
016import org.apache.http.client.methods.HttpGet;
017import org.apache.http.impl.client.DefaultHttpClient;
018import org.json.JSONArray;
019import org.json.JSONObject;
020 
021import android.app.Activity;
022import android.os.Bundle;
023import android.widget.TextView;
024import android.widget.Toast;
025 
026public class JSONActivity extends Activity {
027    private JSONObject jObject;
028 
029    private String xResult ="";
030    //Seusuaikan url dengan nama domain yang anda gunakan
031    private String url = "http://10.0.2.2/android/daftarmakanan.php";
032 
033    @Override
034    public void onCreate(Bundle savedInstanceState) {
035        super.onCreate(savedInstanceState);
036        setContentView(R.layout.daftarmakanan);
037        TextView txtResult = (TextView)findViewById(R.id.TextViewResult);
038        xResult = getRequest(url);
039        try {
040            parse(txtResult);
041        } catch (Exception e) {
042            e.printStackTrace();
043        }
044 
045    }
046    private void parse(TextView txtResult) throws Exception {
047        jObject = new JSONObject(xResult);
048 
049        JSONArray menuitemArray = jObject.getJSONArray("makanan");
050        String sret="";
051        for (int i = 0; i < menuitemArray.length(); i++) {
052            sret +=menuitemArray.getJSONObject(i)
053            .getString("nama_makanan").toString()+" : ";
054            System.out.println(menuitemArray.getJSONObject(i)
055                    .getString("nama_makanan").toString());
056            System.out.println(menuitemArray.getJSONObject(i).getString(
057                    "harga").toString());
058            sret +=menuitemArray.getJSONObject(i).getString(
059            "harga").toString()+"\n";
060        }
061        txtResult.setText(sret);
062    }
063 
064    /**
065     * Method untuk Mengirimkan data kes erver
066     * event by button login diklik
067     *
068     * @param view
069     */
070    public String getRequest(String Url){
071 
072       String sret="";
073        HttpClient client = new DefaultHttpClient();
074        HttpGet request = new HttpGet(Url);
075        try{
076          HttpResponse response = client.execute(request);
077          sret =request(response);
078 
079        }catch(Exception ex){
080            Toast.makeText(this,"Gagal "+sret, Toast.LENGTH_SHORT).show();
081        }
082        return sret;
083 
084    }
085    /**
086     * Method untuk Menenrima data dari server
087     * @param response
088     * @return
089     */
090    public static String request(HttpResponse response){
091        String result = "";
092        try{
093            InputStream in = response.getEntity().getContent();
094            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
095            StringBuilder str = new StringBuilder();
096            String line = null;
097            while((line = reader.readLine()) != null){
098                str.append(line + "\n");
099            }
100            in.close();
101            result = str.toString();
102        }catch(Exception ex){
103            result = "Error";
104        }
105        return result;
106    }
107 
108    }

7. Edit file AndroidMainifest.xml

01<?xml version="1.0" encoding="utf-8"?>
02<manifest xmlns:android="http://schemas.android.com/apk/res/android"
03      package="com.agus.android.php"
04      android:versionCode="1"
05      android:versionName="1.0">
06    <uses-sdk android:minSdkVersion="8" />
07 
08    <application android:icon="@drawable/icon" android:label="@string/app_name">
09        <activity android:name=".MainActivity"
10                  android:label="@string/app_name">
11            <intent-filter>
12                <action android:name="android.intent.action.MAIN" />
13                <category android:name="android.intent.category.LAUNCHER" />
14            </intent-filter>
15        </activity>
16 
17        <activity android:name=".InsertActivity" android:label="Tambah Data">
18        </activity>
19         <activity android:name="JSONActivity" android:label="Daftar Makanan">
20        </activity>
21 
22    </application>
23    <uses-permission android:name="android.permission.INTERNET">
24   </uses-permission>
25</manifest>

8. Semua pekerjaan koding sudah kita lakukan sekarang saatnya Running Time

Sentuh Tampilkan data, Wow amazing data yang ada didatabase MySQL dapat tampil diandroid. 

Android memang joss.

Sentuh Tambah Data, Lalu isikan data sebagai beriku


Untuk Menyimpan Data Sentuk Tombol Simpan, Jika data yang disimpan berhasil

akan muncul Toast  “Tambah Data SUCCESS”

Kembali ke menu lalu Sentuh Tampilkan Data

Alhamdulillah, Data yang kusimpan ternyata berhasil tersimpan di database MySQL

Tutorial ini khusus saya buat untuk para pembaca blog agusharyanto.net yang banyak menanyakan
bagaimana mengakses atau membaca data yang berada diserver dalam hal ini MySQL.

Tetaplah semangat adik-adik mahasiswaku, untuk belajar pemrograman janganlah mudah menyerah,
terus coba dan coba. Dengan sendirinya nanti engkau akan merasa bahwa koding itu nikmat.
Bahkan lebih nikmat dari main Game. Masak sih kak, Coba mari berfikir sejenak.

Pada saat kita koding dan saat bermain game sama-sama enaknya.
Perbedaanya adalah hasil dari kegiatan tersebut, mari kita renungkan beberapa pertanyaan dibawah ini :

  1. Apa hasil dari main game ?
  2. Apa hasil dari koding ?
  3. Kira-kira kalau melamar pekerjaan yang akan diterima yang jago main game atau yang jago koding,
    atau yang jago bikin game ?
  4. Bunda kita tercinta lebih bahagia mana, melihat anaknya menghabiskan waktu untuk main game atau
    melihat anaknya menghabiskan waktu untuk koding ?. Jadi ingat waktu ngisi Seminar Android di
    Universitas Budi Luhur, saya sampaikan tunjukkanlah pada orang tua kita, bahwa pengorbanan mereka
    membiayai kita kuliah tidaklah sia-sia. Coba deh kita buat aplikasi sederhana dengan Android,
    lalu kita tunjukkan kepada orang tua kita, perhatikanlah Expresi Wajah mereka.
  5. Tidakkah kau ingin menjadi seorang sumber informasi, dimana jika ada tugs kuliah
    yang ada hubungannya dengan koding, maka teman-temanmu akan bertanya kepadamu ?

Saya sendiri bukanlah orang yang anti game. Sesekali juga main game :).
Tapi hendaklah gunakanlah waktu dengan sebaik-baiknya. Yang sedang duduk dibangku kuliah,
bayangkan saat kita lulus, siapkah kita masuk kedunia kerja atau siapkah kita menjadi entrepreneur.
Boleh jadi jawabannya akan bergantung pada yang kita lakukan saat ini

Semoga Bermanfaat

Salam hangat

Agus Haryanto

referensi:

http://developer.andorid.com

http://about-android.blogspot.com/2010/03/androind-json-parser.html

269 comments to Tutorial Android PHP dan MySQL

  • uki

    cara edit dan hapus bagaimana mas?

  • afdalfadli

    berarti ini android skarang bisa buat gantikan buku catatan harian toko ya pak? dari pada susah2 beli buku

  • desty

    Pak saya mau tanya, untuk input nama user agar tidak bisa menggunakan angka caranya gimana ya pak?saya coba dengan inputType textPersonName tapi masih bisa dimasukan angka.
    yang kedua saya ingin tanya kalau list data berdasarkan nilai tertinggi ke terendah, listingnya gimana ya pak?
    sebelumnya saya ucapkan terima kasih atas penjelasannya…

  • Fajar

    pa bisa minta referensi , bagai mana cara buat notifikasi di android ketika data di sql bertambah . terima kasih pa 🙂

  • ujang

    boleh tuh pak, 🙂 hehe

  • saya sudah melakukan tahap seperti tutorial diatas tp klo masih ndk bisa koneksi ke database mysql
    pesan errornya
    Tambah data http://10.0.0.2/Connect/simpan.php
    $NOmeja=NM002&makan=makan…….

    file php yang saya gunakan( tersimpan di htdocs/Connect/simpan.php)

  • saya sudah lakukan tahap seperti yang dijelaskan tutorial diatas tp masih tidak bisa koneksi ke database
    pesan yang muncul :
    tambah data http://10.0.0.2/Connect/simpan.php
    &Nomeja=NM001&makan=makan@Tmakan=1

    ket: alamat file php http://10.0.0.2/Connect/simpan.php(xampp/htdocs/Connect/simpan.php)

  • di program saya ndk bisa jalan mas
    padahal saya uda tes koneki php ke mysql uda sukses
    mohon bantuannya mas

  • Agus Haryanto

    @Nicko, Pakai Asynctask untuk request ke servernya

  • Nicko

    Ginama itu Mas?
    Apa yang perlu saya tambahkan?
    Maaf newbie 😀

  • imam

    gan tu ente ganti aja urlnya…
    kalo ente pake xampp/wamp/appserve biasanya tu urlnya ane ganti jadi 127.0.0.1

  • Awab

    Mas saya pakai tutor ini aplikasi udah jalan cuma tinggal di ICS ke atas masih blm bisa, bisa dibantu tambahin script asynctask nya biar bisa semua mas, ditunggu banget mas update nya terima kasih

  • Sodikin

    Assalaamualaikum
    Permisi Pak, saya sudah 2 hari ini mempraktekan tutorial ini, banyak kesulitan yg saya dapati, dari mulai database tidak konek, tabel tidak ditemukan, perubahan di apache mysql yg ternyata skrg menggunakan mysqli (improved) dan yg skrg blum saya selsaikan adalah Apache yg tidak bisa terkoneksi demgan devide android lewat jaringan internet, mungkin karena saya masih sangat awam, ,

    Mohon bimbingan bagaimana detail cara untuk menyelesaikan masalah tersebut,, Terima Kasih sebelumnya pak.

    Sebelumnya mungkin ada temen2 yg kesulitan soal perubahan mysql ke mysqli, berikut ini saya copi kan script yg sudah saya ubah sedikit, , ini berhasil saya coba, semoga berhasil buat temen2, ,

    Scrip ini adalah perubahan script daftarmakanan.php

  • Yes

    pa agus, kalau kita implementasikan di smartphone. caranya gimana?

  • Rony Sucipto

    mohon maaf, jika jaraknya jauh dari db apakah masih bisa tersimpan..?? terimakasih

  • Djoohari

    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;

    cara implement ini gimana yaa pakk ? karena codenyaa gamau baca kalo ini gabisa ke implement duluuu

  • nnda

    ka, tampilkan data cuma bisa di textview ya? kalau tampilkan datanya sekaligus update bagaimana?
    jadi tampilkan nama masih tetep di textview, tp di harga di edittext.

  • ninda

    mas, saya udah coba cuma pas di run gagal semua.
    pas saya baca comment yg lain ternyata banyak yang punya masalah sama kaya saya ya.

    kenapa bisa gagal? apa script di atas gak cocok untuk android di atas 4.0 ? masa iya sih mas?

    kalau emang bener trs script yang cocok kaya gimana?

  • Ninda

    Masyang menampilkan data kan pake nya textview.

    untuk nama menu bolehlah pake textview, trs kalau yang harga pake edittext bisa gak mas?

    biasanya kan tampilkan dulu pake listview untuk daftar menu, tapi saya mau nya gak pperlu pake listview..

    tampilkan semua kaya di menu tampilkan data, tapi di daftar harga tampilkannya dalam bentuk edittext. itu bagaimana ya mas?

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>