- Wednesday, October 11, 2017

Tutorial Xamarin Android : Intent pada Xamarin (dengan Backend PHP MysQL) Part 1




Hallo semuanya, sudah lama sekali tidak menyempatkan diri menulis diblog Xamarin Indonesia. Pada kesempatan kali ini saya akan membahas salah satu komponen yang dimiliki android xamarin yaitu Intent. Intent sendiri secara garis besar adalah sebuah metode yang dapat kita gunakan untuk mengirimkan passing data antar activity atau fragment. Misalkan contohnya adalah ketika kita melakukan aktifitas login dengan username dan password, selain data itu kita pun bisa passing data field laiinya misalkan field id_level untuk mengatur hak akses . Atau mungkin lebih mudahnya adalah saat kita mengakses sebuah data listview ketika kita onClick Items kita akan diarahkan menuju halaman detail karena sudah diberikan passing id.

Yap, dari pada pusing berkepanjangan so, kita langsung praktek saja ya.

Langkah 1
Buatlah sebuah Project Baru dengan nama AppIntent dengan Minimum Android JellyBean SDK nya

Langkah 2
Tambahkan componen JSON.NET pada Get More Componentnya dan Instalkan pada project kalian

Langkah 3
Sebelum kita coding csharp xamarin, kita siapkan beberapa tabel database pada server anda dengan tabel sebagai berikut :

CREATE TABLE `tb_anggota` (
  `id` int(11) NOT NULL,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `nama` varchar(255) NOT NULL,
  `alamat` text NOT NULL,
  `id_level` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `tb_anggota`
--

INSERT INTO `tb_anggota` (`id`, `username`, `password`, `nama`, `alamat`, `id_level`) VALUES
(1, 'agus', 'agus', 'agus', 'jakarta', 2),
(2, 'admin', 'admin', 'administrator', 'jakarta', 1);

-- --------------------------------------------------------

--
-- Table structure for table `tb_level`
--

CREATE TABLE `tb_level` (
  `id_level` int(11) NOT NULL,
  `nama_level` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `tb_level`
--

INSERT INTO `tb_level` (`id_level`, `nama_level`) VALUES
(1, 'admin'),
(2, 'anggota');

-- --------------------------------------------------------

--
-- Table structure for table `tb_produk`
--

CREATE TABLE `tb_produk` (
  `id` int(11) NOT NULL,
  `nama_produk` varchar(255) NOT NULL,
  `harga` int(11) NOT NULL,
  `qty` int(11) NOT NULL,
  `keterangan` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `tb_produk`
--

INSERT INTO `tb_produk` (`id`, `nama_produk`, `harga`, `qty`, `keterangan`) VALUES
(1, 'Laptop MacBook Pro 2017', 18000000, 100, 'Laptop terbaik 2017'),
(2, 'Microsoft Surface Pro', 30000000, 100, 'Laptop Mahal performa menantang'),
(3, 'SSD 1 GB Samsung', 2000000, 50, 'SSD Tercepat 2017'),
(4, 'Hardisk Toshiba 1 TB', 1000000, 45, 'Hardisk Eksternal');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tb_anggota`
--
ALTER TABLE `tb_anggota`
  ADD PRIMARY KEY (`id`),
  ADD KEY `id_level` (`id_level`);

--
-- Indexes for table `tb_level`
--
ALTER TABLE `tb_level`
  ADD PRIMARY KEY (`id_level`);

--
-- Indexes for table `tb_produk`
--
ALTER TABLE `tb_produk`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tb_anggota`
--
ALTER TABLE `tb_anggota`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT for table `tb_level`
--
ALTER TABLE `tb_level`
  MODIFY `id_level` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT for table `tb_produk`
--
ALTER TABLE `tb_produk`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- Constraints for dumped tables
--

--
-- Constraints for table `tb_anggota`
--
ALTER TABLE `tb_anggota`
  ADD CONSTRAINT `tb_anggota_ibfk_1` FOREIGN KEY (`id_level`) REFERENCES `tb_level` (`id_level`);
COMMIT;

Anda bisa mengimportnya pada server SQL anda.

Langkah 4
Kemudian Siapkan File PHP sebagai Generate JSON nya nya

koneksi.php
<?php
 
 $server  = "localhost"; // sesuaikan alamat server anda
 $user  = "nama_userserver"; // sesuaikan user web server anda
 $password = "Password DB Anda"; // sesuaikan password web server anda
 $database = "nama_db anda"; // sesuaikan database web server anda
 
 $connect = mysql_connect($server, $user, $password) or die ("Koneksi gagal!");
 mysql_select_db($database) or die ("Database belum siap!");
?>

login.php

<?php
    header('content-type: application/json');
 include "koneksi.php";
  
 $username = $_GET['username'];
 $password = $_GET['password'];
 $id_level = $_GET['id_level'];
   
 
 $sql="SELECT id,username,password,id_level FROM tb_anggota where username='$username' and password='$password'";
 $result=mysql_query($sql);
 while($hasil=mysql_fetch_assoc($result)) {
  $output[]=$hasil;
 }
 $hasil =json_encode($output);
 echo "{"login_event":" . $hasil . "}";
  
?>

produk.php


<?php
    header('content-type: application/json');
    include "koneksi.php";
 
     $sql="SELECT * FROM tb_produk ORDER BY id DESC";
     $result=mysql_query($sql);
     while($hasil=mysql_fetch_assoc($result)) {
      $output[]=$hasil;
     }
     $hasil =json_encode($output);
     echo $hasil;
?>

detail_produk.php


<?php
    header('content-type: application/json');
 include "koneksi.php";
  
 $id = $_GET['id'];
 
 
     $sql="SELECT * FROM tb_produk Where id='$id' ORDER BY id DESC";
     $result=mysql_query($sql);
     while($hasil=mysql_fetch_assoc($result)) {
      $output[]=$hasil;
     }
     $hasil =json_encode($output);
     echo "{"detail_produk":" . $hasil . "}";
     
?>


Setelah membuat file .php kemudian lakukan upload ke direktori server anda, dapat juga menggunakan filezilla

Langkah 5
Buka file MainActivity.cs lalu ubah codenya sebagai berikut

using Android.App;
using Android.Widget;
using Android.OS;
using System.Net;
using Newtonsoft.Json.Linq;
using Android.Content;

namespace AppIntent
{
 [Activity(Label = "AppIntent", MainLauncher = true)]
 public class MainActivity : Activity
 {
  public string codeuser;
  public string level;
  public string user;
  
  protected override void OnCreate(Bundle savedInstanceState)
  {
   base.OnCreate(savedInstanceState);

   // Set our view from the "main" layout resource
   SetContentView(Resource.Layout.Main);
   EditText username = FindViewById<EditText>(Resource.Id.txtUsername);
   EditText password = FindViewById<EditText>(Resource.Id.txtPassword);
   Button btnlogin = FindViewById<Button>(Resource.Id.btnLogin);

   btnlogin.Click += delegate {
    string xusername = username.Text;
    string xpassword = password.Text;
    WebClient client = new WebClient();
    //Panggil file php untuk cek login di server mu
    var jsonstring = client.DownloadString("https://banyu.center/xamarin/login.php?username=" + xusername + "&password=" + xpassword);
    JObject o = JObject.Parse(jsonstring);
    var ab = o.GetValue("login_event").ToString();

    if (string.IsNullOrWhiteSpace(ab))
    {
     Toast.MakeText(this, "Username dan Password salah", ToastLength.Short).Show();
}
    else
    {
     JArray arr = JArray.Parse(ab);
     //Ambil nilai variablenya
     //namalevel = arr[0]["nama_level"].ToString();
     codeuser = arr[0]["id"].ToString();
     level = arr[0]["id_level"].ToString();
     user = arr[0]["username"].ToString();

     Toast.MakeText(this, "Login Berhasil", ToastLength.Short).Show();

     //Jika login berhasil arahkan ke halaman welcome
     Intent a = new Intent(this, typeof(WelcomeActivity));
     //Buat sebuah parameter yang akan kita kirim ke activity lain
     a.PutExtra("levelnya", level);
     StartActivity(a);
    
    }
   };
  }
 }
}

MainActivity ini adalah halaman yang akan pertama kali kita jumpai yaitu halaman login. Oleh karena itu kita wajib membuat file layout  Main.axml dengan code sbagai berikut

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp">
    <TextView
        android:text="Login Aplikasi"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1"
        android:gravity="center"
        android:textStyle="bold"
        android:layout_marginBottom="48.0dp" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtUsername"
        android:hint="Username" />
    <EditText
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtPassword"
        android:hint="Password" />
    <Button
        android:text="Login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btnLogin"
        android:background="#fff4511e" />
</LinearLayout>

Kita menjumpai code berikut :

//Jika login berhasil arahkan ke halaman welcome
Intent a = new Intent(this, typeof(WelcomeActivity));
//Buat sebuah parameter yang akan kita kirim ke activity lain
a.PutExtra("levelnya", level);
StartActivity(a);

Pertama kita buat sebuah intent yang akan mengarahkan ke halaman WelcomeActivity (Aktivity lain) lalu set parameter yang kita namai dengan levelnya. Isi parameter tersebut berasal dari Parsing JSON yang sudah kita buat sebelumnya dari file login.php ya.

Langkah 6
Pada langkah sebelumnya sudah ada Intent yang mengarahkan ke halaman WelcomeActivity yaitu halaman yang akan diakses setelah login berhasil , dan halaman ini juga sudah dikirimkan levelnya yaitu berisi data id_level. Maka kita harus membuat Activity dengan nama WelcomeActivity.cs beserta layotunya yaitu Welcome.axml

WelcomeActivity.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace AppIntent
{
 [Activity(Label = "WelcomeActivity")]
 public class WelcomeActivity : Activity
 {
  protected override void OnCreate(Bundle savedInstanceState)
  {
   base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Welcome);
   //TextView namalevel = FindViewById<TextView>(Resource.Id.txtLevel);
   ImageButton btnProduk = FindViewById<ImageButton>(Resource.Id.btnProduk);
   //ImageButton btnPromo = FindViewById<ImageButton>(Resource.Id.btnPromo);

   btnProduk.Click += delegate {
    StartActivity(typeof(ProdukActivity));
   };


   string c = Intent.GetStringExtra("levelnya");
   //string i = Intent.GetStringExtra("idnya");

   //Menemukan hak akses
   if (c == "2")
   {
                StartActivity(typeof(ProdukActivity));

   }
   else
   {
                StartActivity(typeof(AdminActivity));
    
   }

   // Create your application here
  }
 }
}

Welcome.axml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp">
    <TextView
        android:text="Welcome,"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1" />
    <TextView
        android:text="Hak Akses"
        android:layout_width="match_parent"
        android:layout_height="59.0dp"
        android:id="@+id/txtLevel" />
    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/gridLayout1"
        android:columnCount="2">
        <ImageButton
            android:src="@drawable/cart"
            android:id="@+id/btnProduk"
            android:padding="20dp" />
        <ImageButton
            android:src="@drawable/promo"
            android:id="@+id/btnPromo"
            android:padding="20dp" />
    </GridLayout>
</LinearLayout>



Nah, jika kalian cermati maka kalian akan menemukan code sebagai berikut

string c = Intent.GetStringExtra("levelnya");
   //string i = Intent.GetStringExtra("idnya");

   //Menemukan hak akses
   if (c == "2")
   {
                StartActivity(typeof(ProdukActivity));

   }
   else
   {
                StartActivity(typeof(AdminActivity));
    
   }

Code string c mengambil parameter Put Extra yang berasal dari MainActivity.cs selanjutnya kita buat implikasi yaitu jika c==2 atau id_levelnya 2 maka dianggap sebagai anggota, oleh karena itu diarahkan ke halaman Produk. Sedangkan jika selain 2 maka dianggap admin.

Karena kita membutuhkan halaman Admin maka kita buat

AdminActivity.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace AppIntent
{
 [Activity(Label = "AdminActivity")]
 public class AdminActivity : Activity
 {
  protected override void OnCreate(Bundle savedInstanceState)
  {
   base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Admin);

   // Create your application here
  }
 }
}

Untuk Layoutnya

Admin.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <TextView
        android:text="Selamat Datang, Administrator"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/textView1"
        android:gravity="center" />
</LinearLayout>

Selanjutnya : Tutorial Xamarin Android : Intent PHP MySQL Part 2

No comments:

Post a Comment

Mohon melakukan komentar dengan bahasa yang mudah dipahami, santun dan dengan bahasa yang baik.