net/publication/315770211
CITATIONS READS
0 3,755
2 authors:
Some of the authors of this publication are also working on these related projects:
Effect of features Generated from additional segments in protein sequence classification View project
All content following this page was uploaded by M Reza Faisal on 04 April 2017.
I
Daftar Isi
Kata Pengantar ............................................................................................... I
Daftar Isi ........................................................................................................ II
Daftar Gambar ............................................................................................. IV
1 Pengenalan Xamarin Forms .......................................................................7
Pendahuluan ...................................................................................................... 7
Apa itu Xamarin? ............................................................................................... 7
Cara Install Xamarin Forms ............................................................................. 8
Memulai Membuat Project Xamarin Form ................................................... 9
Menjalankan Aplikasi.................................................................................... 10
Android ....................................................................................................................10
iOS .............................................................................................................................13
Windows Phone/Windows 8.1/ UWP Win 10 .....................................................14
Layout ................................................................................................................ 19
Practice #2.1 Penggunaan StackLayout ................................................................19
Practice #2.2 Contoh Penggunaan Absolute Layout ..........................................20
Practice #2.3 Menggunakan Relative Layout ......................................................21
Practice #2.4 Menggunakan GridLayout .............................................................22
Task #2.1 Menggunakan Layout dan View sederhana pada Xamarin Form ..23
Task #2.2 Kalkulator Sederhana ............................................................................24
II
Practice #3.1 Menampilkan Data bertipe List Of String .....................................34
Practice #3.2 Menampilkan Data dari Objek Data Model .................................36
Practice #3.3 Menampilkan Gambar pada Cell ...................................................37
Practice #3.4 Kustomisasi Baris pada ListView ...................................................39
III
Daftar Gambar
Gambar 1. Arsitektur dari platform Xamarin. ................................................................................... 8
Gambar 2. Level kode pada Xamarin. ................................................................................................ 8
Gambar 3. Installasi Visual Studio 2015 - Select features. ................................................................ 9
Gambar 4. Windows New Project. ...................................................................................................... 9
Gambar 5. Solution Latihan1. ............................................................................................................ 10
Gambar 6. Visual Studio Emulator for Android. ............................................................................ 10
Gambar 7. Daftar emulator. ............................................................................................................... 11
Gambar 8. Tampilan emulator Android. .......................................................................................... 11
Gambar 9. Window Property Pages - Setting Latihan.Droid sebagai startup project................ 12
Gambar 10. Target device Android. .................................................................................................. 12
Gambar 11. Aplikasi Latihan1.Droid pada emulator Android. .................................................... 13
Gambar 12. Window Property Pages - Setting Latihan.iOS sebagai startup project. ................. 13
Gambar 13. Pemilihan Xamarin Mac Agent. ................................................................................... 14
Gambar 14. Xamarin Mac Aget Intruction. ...................................................................................... 14
Gambar 15. Window Property Pages - Setting Latihan.WinPhone sebagai startup project. .... 15
Gambar 16. Pemilihan Simulator Win 8.1. ....................................................................................... 15
Gambar 17. Aplikasi Latihan1.WinPhone pada Simulator Win 8.1. ............................................ 15
Gambar 18. Komponen utama Xamarin Forms. .............................................................................. 18
Gambar 19. Contoh penggunaan StackLayout. ............................................................................... 19
Gambar 20. Contoh penggunaan AbsoluteLayout. ........................................................................ 20
Gambar 21. Contoh RelativeLayout. ................................................................................................. 21
Gambar 22. Contoh GridLayout. ....................................................................................................... 22
Gambar 23. Contoh Layout & View. ................................................................................................. 24
Gambar 24. Window Add New Item - Modul2............................................................................... 24
Gambar 25. Kalkulator sederhana. .................................................................................................... 26
Gambar 26. Android Manifest. .......................................................................................................... 26
Gambar 27. Solution configuration - Release................................................................................... 26
Gambar 28. Android Option - Linker. .............................................................................................. 27
Gambar 29. Tools - Android Device Logging. ................................................................................. 27
Gambar 30. Create New Key Store. ................................................................................................... 27
Gambar 31. Informasi untuk signed aplikasi Android. ................................................................. 28
Gambar 32. Target Directory.............................................................................................................. 28
IV
Gambar 33. File modul2.modul2-Aligned.apk. ............................................................................... 28
Gambar 34. Menu Archive. ................................................................................................................ 29
Gambar 35. Archive Manager. ........................................................................................................... 30
Gambar 36. Proses archive selesai. .................................................................................................... 30
Gambar 37. Window Distribute - Select Channel. .......................................................................... 30
Gambar 38. Window Android Keystore. .......................................................................................... 31
Gambar 39. Window Distribute - Signing Identity. ........................................................................ 31
Gambar 40. Pilih lokasi folder............................................................................................................ 32
Gambar 41. Window Signing Password. .......................................................................................... 32
Gambar 42. File APK modul2.modul2.............................................................................................. 33
Gambar 43. Project Modul3 - BindingListString.xaml.................................................................... 34
Gambar 44. Tampilan aplikasi Modul3. ........................................................................................... 35
Gambar 45. Aplikasi menampilkan data dari object Data Model. ................................................ 37
Gambar 46. Folder drawable pada solution explorer. .................................................................... 39
Gambar 47. Menampilkan gambar.................................................................................................... 39
Gambar 48. Kustomisasi baris pada antarmuka aplikasi. .............................................................. 41
Gambar 49. Membuat project SimpleWebAPI................................................................................. 42
Gambar 50. Select a template. ............................................................................................................ 43
Gambar 51. Window Change Authentication. ................................................................................ 43
Gambar 52. Akses Web API dari web browser. .............................................................................. 44
Gambar 53. Daftar tabel. ..................................................................................................................... 45
Gambar 54. Tabel Barangs. ................................................................................................................. 45
Gambar 55. Tabel Customers. ............................................................................................................ 45
Gambar 56. Tabel ItemJuals. .............................................................................................................. 46
Gambar 57. Tabel NotaJuals. .............................................................................................................. 46
Gambar 58. Manage NuGet Packages. ............................................................................................. 46
Gambar 59. Window Manage NuGet Packages. ............................................................................. 47
Gambar 60. Web API 2 Controller. .................................................................................................... 47
Gambar 61. BarangController. ........................................................................................................... 47
Gambar 62. Class Model. .................................................................................................................... 49
Gambar 63. Akses web API dengan Fiddler. ................................................................................... 54
Gambar 64. Output class web API controller - Daftar barang. ..................................................... 54
Gambar 65. Output class web API controller - barang. .................................................................. 54
Gambar 66. Output class web API controller - Data barang dengan id HS001. ......................... 55
Gambar 67. Akses http://actservices.azurewebsites.net/api/TodoItem/ dengan Fiddler. ......... 57
V
Gambar 68. Melihat http://actservices.azurewebsites.net/api/TodoItem/ dengan Fiddler. ...... 57
Gambar 69. Menambah library dengan NuGet. .............................................................................. 58
Gambar 70. Aplikasi Xamarin untuk akses REST service. ............................................................. 63
Gambar 71.Mobile Apps Quicstart. .................................................................................................. 64
Gambar 72. Create Mobile Apps Quickstart. ................................................................................... 65
Gambar 73. Membuat layanan Mobile App. ................................................................................... 66
Gambar 74. Fitur layanan Mobil App. .............................................................................................. 67
Gambar 75. Fitur Easy Table. ............................................................................................................. 67
Gambar 76. Manage schema. ............................................................................................................. 68
Gambar 77. Daftar tabel. ..................................................................................................................... 68
Gambar 78. Menambah library Microsoft.Azure.Mobile.Client. .................................................. 69
Gambar 79. Aplikasi Xamarin Forms untuk akses Azure Mobile Apps service. ....................... 75
VI
1
Pengenalan Xamarin Forms
Pendahuluan
Bab ini dibuat untuk rekan pengembang aplikasi mobile di Indonesia yang ingin belajar
bagaimana cara mengembangkan aplikasi mobile Cross Platform untuk sistem operasi IOS,
Android, dan Windows 10. Xamarin menggunakan bahasa C# dan .NET Framework, jadi bagi
anda pengembang .NET yang ingin membuat aplikasi mobile muti platform teknologi ini
adalah pilihan yang tepat bagi anda. Xamarin dapat digunakan secara gratis karena sudah
satu paket dengan Visual Studio 2015 Community Edition.
Seperti namanya Xamarin for Android digunakan jika anda ingin membuat aplikasi native
Android. Sedangkan Xamarin for IOS digunakan untuk membuat aplikasi native IOS. Jika
anda menggunakan salah satu atau kedua teknologi tersebut maka anda dapat membagi
komponen yang sudah anda buat pada satu project untuk digunakan di project yang lain.
Namun yang dapat dibagi hanya komponen selain UI (User Interface). Xamarin for Android
dan Xamarin for IOS masih menggukanan komponen UI yang spesifik dengan platform.
Xamarin Forms adalah teknologi yang lebih baru, kelebihan dari Xamarin Forms adalah dapat
menggunakan satu UI yang dapat di gunakan pada platform yang berbeda. Dengan Xamarin
Forms anda cukup mengembangkan satu aplikasi dengan target platform yang berbeda.
Xamarin Forms menggunakan format XAML (eXtensible Application Markup Language)
untuk membuat tampilan UI.
Arsitektur dari platform Xamarin dapat dilihat pada gambar dibawah ini:
7
Gambar 1. Arsitektur dari platform Xamarin.
Gambar dibawah ini menunjukan level pembagian kode pada Xamarin.
Pada saat melakukan instalasi pilih Custom dan pastikan anda memilih fitur Cross Platform
Mobile Development ketika melakukan instalasi Visual Studio 2015.
8
Gambar 3. Installasi Visual Studio 2015 - Select features.
9
Gambar 5. Solution Latihan1.
Menjalankan Aplikasi
Android
Untuk menjalankan aplikasi Xamarin Forms pada platform Android, anda dapat
menggunakan tools Visual Studio Emulator for Android atau menggunakan Android
Emulator Manager (AVD).
Untuk menjalankan Visual Studio Emulator for Android, anda dapat memilih menu Tools –
Visual Studi Emulator for Android.
Jika pilihan ini belum tersedia anda perlu melakukan download Visual Studio Emulator for
Android terlebih dahulu di link berikut https://www.visualstudio.com/vs/msft-android-
emulator/.
10
Gambar 7. Daftar emulator.
Setelah dijalankan maka anda dapat melihat tampilan emulator sebagai berikut.
11
Untuk menjalankan project Android pada emulator, anda harus merubah target project utama
yang akan dijalankan pada solution explorer menjadi project Droid. Klik kanan pada solution
explorer, kemudian pilih Latihan1.Droid sebagai startup project.
12
Gambar 11. Aplikasi Latihan1.Droid pada emulator Android.
iOS
Langkah pertama adalah mengarahkan project utama ke IOS project dengan cara klik kanan
pada solution explorer, kemudian pilih Latihan1.IOS sebagai startup project.
Gambar 12. Window Property Pages - Setting Latihan.iOS sebagai startup project.
Untuk menjalankan aplikasi IOS anda membutuhkan komputer Mac. Anda dapat
menjalankan IOS simulator lewat Visual Studio namun tetap membutuhkan komputer Mac
yang diremote lewat Visual Studio.
Untuk terkoneksi dengan komputer Mac, pilih Tools – IOS – Xamarin Mac Agent.
13
Gambar 13. Pemilihan Xamarin Mac Agent.
Maka akan muncul tampilan sebagai berikut.
14
Gambar 15. Window Property Pages - Setting Latihan.WinPhone sebagai startup
project.
Untuk menjalankan aplikasi pada Windows Phone 8.1 anda harus mengunduh emulator
Windows Phone 8.1.
Untuk menjalankan aplikasi Windows 8.1 atau UWP anda dapat menggunakan simulator
yang sudah terinstal di Visual Studio. Alternatif lain anda juga dapat langsung memasang
aplikasi tersebut pada komputer anda (menggunakan OS Win 8.1 atau Win 10).
15
Dapat anda lihat bahwa tampilan aplikasi yang dijalankan sama persis dengan aplikasi yang
dipasang pada OS Android. Ini menunjukan bahwa dengan Xamarin Forms anda dapat
membuat aplikasi native yang dapat dijalankan multiplatform.
16
2
User Interface pada Xamarin
Forms
Pendahuluan
Bab ini akan menjelaskan salah satu komponen yang terpenting pada Xamarin Forms yaitu
UI (User Interface). Pada modul ini anda akan mempelajari bagaimana cara menggunakan
objek Page, View, dan Layout pada Xamarin Forms. Untuk membuat komponen UI di
Xamarin Forms digunakan bahasa XAML (eXtensible Application Markup Language), bagi
anda pengembang .NET yang sudah pernah menggunakan platform WPF (Windows
Presentation Foundation) atau Windows Phone pasti tidak asing dengan bahasa markup ini.
Ketika pengguna memilih tombol Back atau Home pada ponsel, maka aplikasi yang sedang
aktif pada saat itu akan masuk ke mode background. Ketika pengguna memilih kembali
aplikasi tersebut, maka app tersebut di resume dan app tersebut dibawa kembali ke mode
foreground. Saat ketika aplikasi dijalankan pertama kali, saat app masuk ke mode background
dan masuk ke mode foreground lagi, sampai app tersebut ditutup (terminate).
17
Gambar 18. Komponen utama Xamarin Forms.
Page
Class Page adalah kontainer utama untuk setiap tampilan pada halaman aplikasi di Xamarin
Forms. Class ini diturunkan dari class Xamarin.Forms.VisualElement. Class Page adalah
baseclass untuk membuat dari semua class UI pada Xamarin Forms. Berikut adalah beberapa
contoh Page yang umum digunakan:
• ContentPage.
• MasterDetailPage.
• NavigationPage.
• TabbedPage.
• CarouselPage.
View
View adalah kontrol interaktif yang ada pada Page. Berikut ini adalah jenis-jenis view yang
ada pada Xamarin Forms.
1. Basic – fundamental views
o Label
o Image
o Button
o BoxView
2. List – scrollabe dan selectable list
o ListView
o Text Entry – entry input pengguna menggunakan keyboard
o Entry
o Editor
3. Selection – pilihan pengguna yang lebih dari satu.
o Picker
o DatePicker
o TimePicker
o Stepper
o Slider
o Switch
18
4. User Feedback – notifikasi pengguna
o Activity
Layout
Layout adalah wadah yang digunakan untuk pengaturan posisi kontrol (view, atau layout
lain). Ada beberapa macam layout yang didukung oleh Xamarin Form yaitu:
• StackLayout: mengatur kontrol secara horisontal atau vertikal.
• AbsoluteLayout: pengaturan posisi berdasarkan letak yang pasti.
• RelativeLayout: pengaturan posisi kontrol berdasarkan kontrol yang lain.
• Grid: membuat layout yang terdiri dari kolom dan baris seperti tabel.
Pada file App.xaml.cs tambahkan kode berikut untuk menjalankan halaman ini pada saat
program pertama kali dijalankan.
public App()
{
InitializeComponent();
MainPage = new SampleStackLayout();
}
19
Practice #2.2 Contoh Penggunaan Absolute Layout
Pada contoh dibawah ini akan ditunjukan cara untuk menggunakan Absoule Layout. Pada
project portable, tambahkan xaml page baru dengan nama AbsoluteLayout.xaml. kemudian
tambahkan kode xaml berikut.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Bab2XamarinForm.AbsoluteLayout">
<AbsoluteLayout>
<Label Text="I'm centered on iPhone 4 but no other device"
AbsoluteLayout.LayoutBounds="115,150,100,100" LineBreakMode="WordWrap" />
<Label Text="I'm bottom center on every device."
AbsoluteLayout.LayoutBounds=".5,1,.5,.1" AbsoluteLayout.LayoutFlags="All"
LineBreakMode="WordWrap" />
<BoxView Color="Olive" AbsoluteLayout.LayoutBounds="1,.5, 25, 100"
AbsoluteLayout.LayoutFlags="PositionProportional" />
<BoxView Color="Red" AbsoluteLayout.LayoutBounds="0,.5,25,100"
AbsoluteLayout.LayoutFlags="PositionProportional" />
<BoxView Color="Blue" AbsoluteLayout.LayoutBounds=".5,0,100,25"
AbsoluteLayout.LayoutFlags="PositionProportional" />
</AbsoluteLayout>
</ContentPage>
Pada file App.xaml.cs tambahkan kode berikut untuk menjalankan halaman ini pada saat
program pertama kali dijalankan.
public App()
{
InitializeComponent();
MainPage = new AbsoluteLayout();
}
20
Practice #2.3 Menggunakan Relative Layout
RelativeLayout dapat digunakan untuk memposisikan elemen menggunakan automatic
scaling pada ukuran layar yang berbeda. Penggunaan layout ini memanfaatkan relasi antar
view. Setiap view akan dapat diposisikan terhadap view sebelah/tetangganya.
Pada project portable, tambahkan xaml page baru dengan nama RelativeLayout.xaml.
kemudian tambahkan kode xaml berikut.
<RelativeLayout>
<BoxView Color="Red" x:Name="redBox"
RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,
Property=Height,Factor=.15,Constant=0}"
RelativeLayout.WidthConstraint="{ConstraintExpression
Type=RelativeToParent,Property=Width,Factor=1,Constant=0}"
RelativeLayout.HeightConstraint="{ConstraintExpression
Type=RelativeToParent,Property=Height,Factor=.8,Constant=0}" />
<BoxView Color="Blue"
RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToView,
ElementName=redBox,Property=Y,Factor=1,Constant=50}"
RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToView,
ElementName=redBox,Property=X,Factor=1,Constant=50}"
RelativeLayout.WidthConstraint="{ConstraintExpression
Type=RelativeToView,ElementName=redBox,
Property=Width,Factor=.5,Constant=0}"
RelativeLayout.HeightConstraint="{ConstraintExpression
Type=RelativeToView,ElementName=redBox,
Property=Height,Factor=.5,Constant=0}" />
</RelativeLayout>
Pada file App.xaml.cs tambahkan kode berikut untuk menjalankan halaman ini pada saat
program pertama kali dijalankan.
public App()
{
InitializeComponent();
MainPage = new RelativeLayout();
}
21
Practice #2.4 Menggunakan GridLayout
Dengan menggunakan GridLayout, kita dapat memposisikan view berdasarkan alamat row
dan kolom sama seperti ketika kita menggunakan spreadsheet di Microsoft Excel atau html
table.
Pada project portable, tambahkan xaml page baru dengan nama GridLayout.xaml. kemudian
tambahkan kode xaml berikut.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Modul2.GridLayout">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Text="Top Left" Grid.Row="0" Grid.Column="0" />
<Label Text="Top Right" Grid.Row="0" Grid.Column="1" />
<Label Text="Bottom Left" Grid.Row="1" Grid.Column="0" />
<Label Text="Bottom Right" Grid.Row="1" Grid.Column="1" />
</Grid>
</ContentPage>
Pada file App.xaml.cs tambahkan kode berikut untuk menjalankan halaman ini pada saat
program pertama kali dijalankan.
public App()
{
InitializeComponent();
MainPage = new GridLayout();
}
22
Task #2.1 Menggunakan Layout dan View sederhana pada Xamarin
Form
Buat project Cross Platform dan pilih Blank Xaml App (Portable). Beri nama project tersebut
Modul2.
Kemudian pada file MainPage.xaml.cs tambahkan kode berikut untuk menambahkan event
pada tombol klik.
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
btnHello.Clicked += BtnHello_Clicked;
}
Untuk menjalankan aplikasi pada platform Android, klik kanan pada project Droid kemudian
pilih Set as Startup Project.
Tekan tombol Ctrl+F5 untuk menjalankan aplikasi pada emulator Android. Hasilnya dapat
dilihat pada tampilan berikut.
23
Gambar 23. Contoh Layout & View.
24
<Label Text="Hasil :" FontSize="Medium" />
<Entry x:Name="entryHasil" IsEnabled="false" />
<StackLayout Orientation="Horizontal">
<Button x:Name="btnTambah" Text="Tambah" />
<Button x:Name="btnKurang" Text="Kurang" />
<Button x:Name="btnKali" Text="Kali" />
<Button x:Name="btnBagi" Text="Bagi" />
</StackLayout>
</StackLayout>
</ContentPage>
btnTambah.Clicked += Btn_Clicked;
btnKurang.Clicked += Btn_Clicked;
btnKali.Clicked += Btn_Clicked;
btnBagi.Clicked += Btn_Clicked;
}
Jalankan program diatas pada emulator dengan menekan tombol Ctrl+F5. Hasil dari program
diatas dapat dilihat pada gambar berikut.
25
Gambar 25. Kalkulator sederhana.
Untuk membuat file .apk yang akan anda upload maka anda dapat mengikuti langkah sebagai
berikut ini. Klik kanan pada project Droid, kemudian pilih Android Manifest, kemudian
lengkapi informasi dari aplikasi anda.
26
Gambar 28. Android Option - Linker.
27
Gambar 31. Informasi untuk signed aplikasi Android.
Isikan alamat folder dimana anda akan menyimpan file .apk yang akan dihasilkan. Kemudian
langkah terakhir tekan tombol Create.
28
Kompres file .apk yang sudah dihasilkan (modul2.modul2.Aligned.apk) kemudian upload
file tersebut pada fitur upload yang sudah tersedia pada halaman ini untuk direview oleh tim
penilai.
29
Gambar 35. Archive Manager.
30
Anda akan diminta untuk membuat sertifikat Android Keystore, masukan data yang
dibutuhkan seperti gambar dibawah ini, kemudian tekan tombol Create.
31
Gambar 40. Pilih lokasi folder.
Anda akan diminta untuk memasukan password yang sebelumnya sudah anda buat ketika
membuat Android Keystore.
32
Gambar 42. File APK modul2.modul2.
33
3
Menampilkan Data Pada
ListView
Pendahuluan
Modul ini akan membahas bagaimana menggunakan kontrol ListView pada Xamarin Forms.
ListView adalah salah satu kontrol yang banyak digunakan untuk menampilkan data pada
layar ponsel yang memiliki keterbatasan ukuran. Untuk menampilkan data dari sumber data
kedalam view/kontrol maka digunakan mekanisme data binding.
34
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Modul3.BindingListString">
<ListView x:Name="listView" />
</ContentPage>
Anda juga dapat mengambil informasi data/item yang dipilih pada ListView, caranya adalah
dengan menambahkan event handler ‘ItemTapped’ kedalam ListView.
public BindingListString()
{
InitializeComponent();
List<string> items = new List<string> { "First", "Second", "Third" };
listView.ItemsSource = items;
Setelah itu masuk ke halaman App.xaml.cs dan ubah kode program berikut di bagian
constructor seperti berikut ini.
public App()
{
InitializeComponent();
MainPage = new Modul3.BindingListString();
}
Tekan F5 untuk menjalankan program pada emulator, hasilnya dapat dilihat pada gambar
dibawah ini.
35
Practice #3.2 Menampilkan Data dari Objek Data Model
Pada contoh berikut dijelaskan cara menampilkan data dari objek data model yang sudah
disiapkan sebelumnya.
Pada project Portable, tambahkan folder baru dengan nama Models, kemudian tambahkan
class dengan nama ListItem.cs.
public class ListItem
{
public string Title { get; set; }
public string Description { get; set; }
}
Untuk class yang digunakan untuk Binding, pastikan menggunakan Public. Kemudian
tambahkan halaman xaml baru (Form Xaml Page) dengan nama BindingToDataModel.xaml,
kemudian tambahkan kode xaml berikut ini.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Modul3.BindingToDataModel">
<ListView ItemsSource="{Binding ListItems}" ItemTapped="ListViewItemTapped">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Title}" Detail="{Binding Description}"
DetailColor="Red" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
Pada halaman xaml diatas digunakan ItemTemplate untuk mengatur data yang akan
ditampilkan pada kontrol ListView. Keyword Binding digunakan untuk mengikatkan data
yang diambil dari objek data model kedalam kontrol ListView. Element TextCell digunakan
untuk menampilkan dua informasi yaitu title dan description. Pada file
BindingToDataModel.xaml.cs tambahkan kode berikut ini.
public partial class BindingToDataModel : ContentPage
{
public BindingToDataModel()
{
InitializeComponent();
BindingContext = new ListViewDataModelViewModel();
}
36
Jika ada merah pada ListItem tambahkan using Modul3.Models. Kemudian Property
BindingContext digunakan untuk mengarahkan sumber data yang akan ditampilkan pada
halaman xaml. File Class ListViewDataModelViewModel.cs. akan digunakan untuk
membuat objek ListItems yang akan ditampilkan kedalam kontrol ListView.
Pada kode diatas dapat dilihat bahwa class ListViewDataModelViewModel diturunkan dari
class BindableObject, ini bertujuan agar kita dapat menggunakan method
OnPropertyChanged() yang akan memberi tahu program bahwa ada objek yang berubah.
Untuk mengambil informasi dari data yang dipilih pada kontrol ListView, anda dapat
menambahkan event ItemTapped ke dalam class BindingToDataModel seperti ditunjukan
pada kode berikut ini.
private async void ListViewItemTapped(object sender, ItemTappedEventArgs e)
{
ListItem item = (ListItem)e.Item;
await DisplayAlert("Tapped", item.Title.ToString() + " was selected", "OK");
((ListView)sender).SelectedItem = null;
}
Setelah itu masuk ke halaman App.xaml.cs dan ubah kode program berikut di bagian
constructor seperti berikut ini.
public App()
{
InitializeComponent();
MainPage = new BindingToDataModel();
}
37
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
Pada kode xaml diatas dapat dilihat bahwa elemen Data Template yang digunakan berbeda
dengan contoh sebelumnya yang menggunakan element TextCell, pada kasus ini digunakan
element ImageCell untuk menampilkan data berupa image dan text.
Pada folder Models modifikasi class ListItem.cs yang sebelumnya sudah dibuat. Tambahkan
property Source yang akan digunakan untuk menyimpan informasi gambar.
public class ListItem
{
public string Source { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
public ListViewImageCellViewModel()
{
listItems = new List<ListItem>
{
new ListItem { Source="first.png", Title="Mystic",
Description="Mystic team blue badge" },
new ListItem { Source="second.png",
Title="Instinct",Description="Instinct team yellow badge" },
new ListItem { Source="third.png", Title="Valor",Description="Valor
team red badge" }
};
}
}
}
Tambahkan juga class dengan nama ListViewImageCellViewModel.cs. Class ini berisi objek-
objek yang akan ditampilkan pada kontrol ListView. Kode di atas mirip dengan contoh
sebelumnya, hanya ada tambahan inisialisasi satu property baru yaitu Source yang berisi
nama file image yang akan ditampilkan.
Untuk menambahkan image yang akan ditampilkan, tambahkan image yang akan
ditampilkan kedalam project Droid (untuk aplikasi android) di folder Resources\drawable.
Pada contoh berikut ditambahkan tiga file bertipe .png kedalam folder tersebut. Anda dapat
download asset tersebut di link berikut
https://gifdicoding.blob.core.windows.net/academyxamarin/123.zip.
38
Gambar 46. Folder drawable pada solution explorer.
Kemudian tekan tombol F5 untuk menjalankan program pada emulator, hasil dari aplikasi
yang sudah dibuat dapat dilihat pada kode berikut ini. Jangan lupa untuk mengganti
inisalisasi page yang diload oleh aplikasi pada App.xaml.cs.
39
<Label HorizontalOptions="Start" FontSize="20" FontAttributes="Bold"
TextColor="White" Text="{Binding Title}"/>
<Label HorizontalOptions="Start" FontSize="12" FontAttributes="Bold"
TextColor="White" Text="{Binding Description}"/>
</StackLayout>
<Label HorizontalOptions="End" FontSize="25" TextColor="Aqua"
Text="{Binding Price}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
Pada kode xaml diatas dapat dilihat bahwa kontrol ListView dapat mempunyai ItemTemplate
yang berupa ViewCell. Element ViewCell ini sangat fleksible sehingga dapat diisi dengan
element lain. Pada contoh diatas dapat dilihat bahwa ViewCell diisi dengan tiga kontrol label
yang disusun menggunakan StackLayout.
Pada folder Models modifikasi class ListItem yang sebelumnya sudah dibuat dengan
menambahkan property baru yaitu Price.
public class ListItem
{
public string Source { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Price { get; set; }
}
public ListViewCustomViewModel()
{
listItems = new List<ListItem>
{
new ListItem { Title="Pokeball", Description="Pokeball Red",
Price="Rp.10.000" },
new ListItem {Title="Masterball",Description="Masterball
Blue",Price="Rp.20.000" },
new ListItem {Title="Ultraball",Description="Ultraball
Yellow",Price="Rp.50.000" }
};
}
}
}
Untuk menjalankan program tekan tombol F5, maka anda akan dapat melihat hasilnya pada
android emulator. Jangan lupa untuk mengganti inisalisasi page yang diload oleh aplikasi
pada App.xaml.cs.
40
Gambar 48. Kustomisasi baris pada antarmuka aplikasi.
41
4
Membangun Backend dengan
ASP.NET Web API
Pendahuluan
Pada Bab kali ini akan dibuat aplikasi backend berupa REST Web Service menggunakan
ASP.NET Web API Framework. Setelah aplikasi backend REST web services sudah jadi maka
kita akan mencoba untuk mengakses REST service ini dari aplikasi Xamarin Forms.
Membuat Project
Untuk membuat project Web API tambahkan project baru pada Visual Studio, kemudian pilih
ASP.NET Web Application.
42
Gambar 50. Select a template.
Kemudian pilih tombol Change Authentication untuk mengganti mekanisme autentikasi
menjadi No Authentication.
// GET api/values/5
public string Get(int id)
{
return "value";
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
43
// DELETE api/values/5
public void Delete(int id)
{
}
}
Untuk memastikan keluaran data berupa format file JSON, tambahkan kode berikut pada
WebApiConfig.cs.
using System.Net.Http.Headers;
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.Formatters.JsonFormatter.SupportedMediaTypes
.Add(new MediaTypeHeaderValue("text/html"));
……
}
}
Tekan tombol F5 untuk menjalankan program, kemudian tuliskan url berikut pada browser
untuk mengakses API.
Membuat Database
Buka SQL Server Management Studio, kemudian buat database baru dengan nama
SampleWebAPIDb. Adapun tabel-tabelnya adalah sebagai berikut:
- ItemJuals.
- Customers
- Barangs.
- NotaJuals.
44
Gambar 53. Daftar tabel.
Barikut ini adalah detail atribut-atribut dari tabel-tabel di atas.
45
Gambar 56. Tabel ItemJuals.
Kemudian tambahkan juga relasi seperti yang dilihat pada gambar daftar tabel di atas.
46
Gambar 59. Window Manage NuGet Packages.
Pada file web.config, tambahkan connection string berikut:
<connectionStrings>
<add name="SampleWebAPIDbConnectionString" connectionString="Data
Source=LABS;Initial Catalog=SampleWebAPIDb;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
Klik kanan pada folder Controller > Add > Controller > pilih Web API 2 Controller with
read/write action.
47
Klik kanan pada folder Model > Add > Class > beri nama Barang.class. Kemudian tambahkan
kode sebagai berikut ini.
public class Barang
{
public string KodeBarang { get; set; }
public string Nama { get; set; }
public int Stok { get; set; }
public decimal HargaBeli { get; set; }
public decimal HargaJual { get; set; }
public string PicUrl { get; set; }
}
Kemudian tambahkan kode berikut pada BarangController untuk kebutuhan operasi create,
retrieve, update dan delete (CRUD).
using System.Configuration;
using SimpleWebAPI.Models;
using Dapper;
using System.Data.SqlClient;
namespace SimpleWebAPI.Controllers
{
public class BarangController : ApiController
{
private string GetConnecTionString()
{
return ConfigurationManager
.ConnectionStrings["SampleWebAPIDbConnectionString"].ConnectionString;
}
// GET: api/Barang
public IEnumerable<Barang> Get()
{
IEnumerable<Barang> result;
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"select
KodeBarang,Nama,Stok,HargaBeli,HargaJual,PicUrl
from Barangs order by Nama asc";
result = conn.Query<Barang>(strSql);
}
return result;
}
[Route("api/Barang/GetByNama")]
public IEnumerable<Barang> GetByNama(string nama)
{
IEnumerable<Barang> result;
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = string.Format(@"select
KodeBarang,Nama,Stok,HargaBeli,HargaJual,PicUrl
from Barangs where Nama like '%{0}%'
order by Nama asc", nama);
result = conn.Query<Barang>(strSql);
}
return result;
}
// GET: api/Barang/5
public string Get(int id)
{
return "value";
}
// POST: api/Barang
public void Post([FromBody]Barang barang)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = string.Format(@"insert into
Barangs(KodeBarang,Nama,Stok,HargaBeli,HargaJual,PicUrl)
48
values('{0}','{1}',{2},{3},{4},'{5}')", barang.KodeBarang, barang.Nama, barang.Stok,
barang.HargaBeli, barang.HargaJual,
barang.PicUrl);
conn.Execute(strSql);
}
}
// PUT: api/Barang/5
public void Put(string id, [FromBody]Barang barang)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"update Barangs set Nama=@Nama, Stok=@Stok,
HargaBeli=@HargaBeli, HargaJual=@HargaJual, PicUrl=@PicUrl where
KodeBarang=@KodeBarang";
conn.Execute(strSql,new
Barang{KodeBarang=barang.KodeBarang,Nama=barang.Nama,HargaBeli=barang.HargaBeli,Har
gaJual=barang.HargaJual,PicUrl=barang.PicUrl});
}
}
// DELETE: api/Barang/5
public void Delete(string id)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"delete from Barangs where KodeBarang=@KodeBarang";
conn.Execute(strSql, new { KodeBarang = id });
}
}
}
}
49
}
// POST: api/Customer
public void Post([FromBody]Customer customer)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"insert into Barangs(KodeCust,Nama,Alamat,Telp)
values(@KodeCust,@Nama,@Alamat,@Telp)";
conn.Execute(strSql,
new Customer { KodeCust = customer.KodeCust, Nama = customer.Nama,
Alamat = customer.Alamat, Telp = customer.Telp });
}
}
// PUT: api/Customer/5
public void Put(string id, [FromBody]Customer customer)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"update Customers set Nama=@Nama, Alamat=@Alamat,
Telp=@Telp where KodeCust=@KodeCust";
50
}
// DELETE: api/Customer/5
public void Delete(string id)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"delete from Customers where KodeCust=@KodeCust";
conn.Execute(strSql, new { KodeCust = id });
}
}
}
Sedangkan untuk mengelola nota jual dibuat web API controller berikut ini.
public class NotaJualController : ApiController
{
private string GetConnecTionString()
{
return ConfigurationManager
.ConnectionStrings["SampleWebAPIDbConnectionString"].ConnectionString;
}
// GET: api/NotaJual
public IEnumerable<NotaJual> Get()
{
IEnumerable<NotaJual> result;
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"select NoNota,Tanggal,KodeCust
from NotaJuals order by NoNota desc";
result = conn.Query<NotaJual>(strSql);
}
return result;
}
// GET: api/NotaJual/5
public NotaJual Get(int id)
{
NotaJual result;
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"select NoNota,Tanggal,KodeCust
from NotaJuals where NoNota=@NoNota";
result = conn.Query<NotaJual>(strSql, new { NoNota = id
}).SingleOrDefault();
}
return result;
}
// POST: api/NotaJual
public int Post([FromBody]NotaJual notajual)
{
int result;
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"insert into NotaJuals(Tanggal,KodeCust)
values(@Tanggal,@KodeCust);select @@identity";
result = conn.Query<int>(strSql,
new NotaJual { Tanggal = notajual.Tanggal, KodeCust =
notajual.KodeCust }).SingleOrDefault();
}
return result;
}
// PUT: api/NotaJual/5
public void Put(int id, [FromBody]NotaJual notajual)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"update NotaJuals set
Tanggal=@Tanggal,KodeCust=@KodeCust where NoNota=@NoNota";
51
}
}
// DELETE: api/NotaJual/5
public void Delete(int id)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"delete from NotaJuals where NoNota=@NoNota";
conn.Execute(strSql, new { NoNota = id });
}
}
}
ItemJualController:
public class ItemJualController : ApiController
{
private string GetConnecTionString()
{
return ConfigurationManager
.ConnectionStrings["SampleWebAPIDbConnectionString"].ConnectionString;
}
// GET: api/ItemJual
public IEnumerable<ItemJual> Get()
{
IEnumerable<ItemJual> result;
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"select ItemJualID,Jumlah,HargaJual,NoNota,KodeBarang
from ItemJuals order by NoNota,ItemJualID desc";
result = conn.Query<ItemJual>(strSql);
}
return result;
}
// GET: api/ItemJual/5
public ItemJual Get(int id)
{
ItemJual result;
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"select ItemJualID,Jumlah,HargaJual,NoNota,KodeBarang
from ItemJuals where ItemJualID=@ItemJualID";
result = conn.Query<ItemJual>(strSql, new { ItemJualID = id
}).SingleOrDefault();
}
return result;
}
// POST: api/ItemJual
public void Post([FromBody]ItemJual itemjual)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"insert into
ItemJuals(Jumlah,HargaJual,NoNota,KodeBarang)
values(@Jumlah,@HargaJual,@NoNota,@KodeBarang)";
conn.Execute(strSql,
new ItemJual { Jumlah = itemjual.ItemJualID, HargaJual =
itemjual.HargaJual, NoNota = itemjual.NoNota, KodeBarang = itemjual.KodeBarang });
}
}
// PUT: api/ItemJual/5
public void Put(int id, [FromBody]ItemJual itemjual)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"update ItemJuals set
Jumlah=@Jumlah,HargaJual=@HargaJual,NoNota=@NoNota,KodeBarang=@KodeBarang where
ItemJualID=@ItemJualID";
52
conn.Execute(strSql, new ItemJual { ItemJualID = itemjual.ItemJualID,
Jumlah = itemjual.Jumlah, HargaJual = itemjual.HargaJual, NoNota = itemjual.NoNota,
KodeBarang = itemjual.KodeBarang });
}
}
// DELETE: api/ItemJual/5
public void Delete(int id)
{
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"delete from ItemJuals where ItemJualID=@ItemJualID";
conn.Execute(strSql, new { ItemJualID = id });
}
}
}
Untuk mengelola transaksi jual dibuat web API controller berikut ini.
public class TransaksiJualController : ApiController
{
private string GetConnecTionString()
{
return ConfigurationManager
.ConnectionStrings["SampleWebAPIDbConnectionString"].ConnectionString;
}
// GET: api/TransaksiJual
public IEnumerable<ViewDetailTransaksi> Get()
{
IEnumerable<ViewDetailTransaksi> result;
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"select
n.NoNota,n.Tanggal,i.ItemJualID,n.KodeCust,c.Nama as NamaCust,i.KodeBarang,b.Nama
as NamaBarang,i.Jumlah,i.HargaJual,(i.Jumlah*i.HargaJual) as TotalHarga
from Barangs as b inner join ItemJuals as i on
b.KodeBarang=i.KodeBarang
inner join NotaJuals as n on i.NoNota = n.NoNota
inner join Customers as c on n.KodeCust = c.KodeCust
order by n.NoNota,i.ItemJualID desc";
result = conn.Query<ViewDetailTransaksi>(strSql);
}
return result;
}
// GET: api/TransaksiJual/5
public ViewDetailTransaksi Get(int id)
{
ViewDetailTransaksi result;
using (SqlConnection conn = new SqlConnection(GetConnecTionString()))
{
string strSql = @"select
n.NoNota,n.Tanggal,i.ItemJualID,n.KodeCust,c.Nama as NamaCust,i.KodeBarang,b.Nama
as NamaBarang,i.Jumlah,i.HargaJual,(i.Jumlah*i.HargaJual) as TotalHarga
from Barangs as b inner join ItemJuals as i on
b.KodeBarang=i.KodeBarang
inner join NotaJuals as n on i.NoNota = n.NoNota
inner join Customers as c on n.KodeCust = c.KodeCust
where i.ItemJualID=@ItemJualID";
result = conn.Query<ViewDetailTransaksi>(strSql, new { ItemJualID=id
}).SingleOrDefault();
}
return result;
}
}
53
Gambar 63. Akses web API dengan Fiddler.
54
Gambar 66. Output class web API controller - Data barang dengan id HS001.
55
5
Mengakses REST Services
dengan Xamarin Forms
Pendahuluan
Pada modul ini akan dibahas bagaimana bekerja untuk bekerja dengan REST Services pada
aplikasi backend.
56
Gambar 67. Akses http://actservices.azurewebsites.net/api/TodoItem/ dengan
Fiddler.
Pada jendela bagian kiri akan ditampilkan hasil-nya. Status yang tertera adalah 200 OK yang
menunjukan bahwa request ke server berhasil. Data JSON yang dikembalikan dapat dilihat
pada gambar dibawah ini.
57
Practice #5.2 Mengakses REST Services dari Xamarin Forms
Buat project Xamarin Forms baru dengan nama TodoREST. Kemudian klik kanan pada
solution kemudian pilih Manage Nuget Package for Solution. Kemudian tambahkan library
Microsoft.Bcl.Build, Microsoft.Net.Http, dan Newtonsoft.Json.
Pada project portable, tambahkan juga class dengan nama Constants.cs untuk menyimpan
alamat url dari REST Services.
public static class Constants
{
public static string RestUrl =
"http://actservices.azurewebsites.net/api/TodoItem/{0}";
}
Pada project portable, tambahkan foder dengan nama Data. Kemudian pada folder tersebut
tambahkan interface baru dengan nama IRestService.cs. Interface ini berisi method-method
yang akan digunakan untuk menampilkan, menambahkan, mengedit, dan mendelete data.
using System.Threading.Tasks;
using TodoREST.Models;
namespace TodoREST.Data
{
public interface IRestService
{
Task<List<TodoItem>> RefreshDataAsync();
Task SaveTodoItemAsync(TodoItem item, bool isNewItem);
Task DeleteTodoItemAsync(string id);
}
}
58
Pada folder Data, tambahkan class dengan nama RestServices.cs. Class ini digunakan untuk
mengakses REST Services menggunakan class HttpClient dan menampung datanya kedalam
objek koleksi yang sudah disediakan.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using TodoREST.Data;
namespace TodoREST.Data
{
public class RestService : IRestService
{
HttpClient client;
try
{
var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
Items = JsonConvert.DeserializeObject<List<TodoItem>>(content);
}
}
catch (Exception ex)
{
Debug.WriteLine(@"Kesalahan {0}", ex.Message);
}
return Items;
}
if (response.IsSuccessStatusCode)
{
Debug.WriteLine(@"TodoItem berhasil disimpan.");
}
59
catch (Exception ex)
{
Debug.WriteLine(@"Kesalahan {0}", ex.Message);
}
}
try
{
var response = await client.DeleteAsync(uri);
if (response.IsSuccessStatusCode)
{
Debug.WriteLine(@"TodoItem berhasil didelete.");
}
}
catch (Exception ex)
{
Debug.WriteLine(@"Kesalahan {0}", ex.Message);
}
}
}
}
Class diatas berisi method-method untuk mengakses REST Services yang digunakan untuk
menampilkan, menambah, mengedit, dan mendelete data.
Pada folder Data, tambahkan class dengan nama TodoItemManager.cs. Class ini berfungsi
untuk memanggil method pada class RestServices.cs.
using System.Collections.Generic;
using System.Threading.Tasks;
using TodoREST.Models;
namespace TodoREST.Data
{
public class TodoItemManager
{
IRestService restService;
Langkah selanjutnya adalah menampilkan data yang sudah diambil dari REST Services.
Untuk itu pada project portable buat folder baru dengan nama Views.
Pada folder Views tambahkan halaman xaml dengan nama TodoListPage.xaml. Halaman ini
digunakan untuk menampilkan informasi todolist pada kontrol ListView.
<?xml version="1.0" encoding="UTF-8"?>
60
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TodoREST.TodoListPage" Title="Todo">
<ContentPage.ToolbarItems>
<ToolbarItem Text="+" Clicked="OnAddItemClicked">
<ToolbarItem.Icon>
<OnPlatform x:TypeArguments="FileImageSource"
Android="plus.png" />
</ToolbarItem.Icon>
</ToolbarItem>
</ContentPage.ToolbarItems>
<ContentPage.Content>
<ListView x:Name="listView" ItemSelected="OnItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="20,0,0,0"
HorizontalOptions="StartAndExpand" Orientation="Horizontal">
<Label Text="{Binding Name}"
VerticalTextAlignment="Center" />
<Image Source="check.png" IsVisible="{Binding Done}"
/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage.Content>
</ContentPage>
Tambahkan gambar plus.png dan icon.png pada project Droid (folder Resources\drawable).
Dengan klik kanan pada drawable > Add > Existing Item... > kemudian cari gambar icon.
Kemudian tambahkan kode berikut pada file TodoListPage.xaml.cs.
using Xamarin.Forms;
namespace TodoREST
{
public partial class TodoListPage : ContentPage
{
bool alertShown = false;
public TodoListPage()
{
InitializeComponent();
}
61
Kode diatas berisi method yang digunakan untuk menampilkan data todo list kedalam
kontrol ListView, dan menambahkan event ketika list tersebut dipilih.
Tambahkan halaman xaml baru dengan nama TodoItemPage.xaml. Halaman ini digunakan
untuk menampilkan detail todo, mengedit, dan mendelete data.
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TodoREST.TodoItemPage"
Title="Todo">
<ContentPage.Content>
<StackLayout VerticalOptions="StartAndExpand">
<Label Text="Name" />
<Entry x:Name="nameEntry" Text="{Binding Path=Name}"
Placeholder="task name" />
<Label Text="Notes" />
<Entry x:Name="notesEntry" Text="{Binding Path=Notes}" />
<Label Text="Done" />
<Switch x:Name="doneSwitch" IsToggled="{Binding Path=Done}"
/>
<Button Text="Save" Clicked="OnSaveActivated" />
<Button Text="Delete" Clicked="OnDeleteActivated" />
<Button Text="Cancel" Clicked="OnCancelActivated" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
namespace TodoREST
{
public partial class TodoItemPage : ContentPage
{
bool isNewItem;
Langkah terakhir tambahkan kode berikut pada file App.xaml.cs pada project portable.
using TodoREST.Data;
using Xamarin.Forms;
62
public static ITextToSpeech Speech { get; set; }
public App()
{
TodoManager = new TodoItemManager(new RestService());
MainPage = new NavigationPage(new TodoListPage());
}
}
63
6
Bekerja dengan Azure Mobile
Apps
64
Gambar 72. Create Mobile Apps Quickstart.
Masukan nama services sebagai contoh saya memasukan nama layanan dengan nama
“actualmobileservices”. Kemudian pilih Subscription, pada contoh ini digunakan accout
Dreamspark/Microsoft Imagine (free account untuk mahasiswa dan akademisi). Selanjutnya
Buat resource group baru. Resource group digunakan untuk mengelompokan layanan yang
ada di azure. Untuk plan digunakan plan FREE yang dapat digunakan jika menggunakan
account Dreamspark/Microsoft Imagine. Untuk lokasi data center pilih yang terdekat yaitu
SEA (Southeast Asia). Kemudian pilih tombol Create untuk membuat layanan Mobile App.
65
Gambar 73. Membuat layanan Mobile App.
Setelah berhasil membuat layanan tersebut, masuk kedalam menu layanan Mobile App
sebagai berikut. Disana anda dapat melihat berbagai macam fitur yang ditawarkan.
66
Gambar 74. Fitur layanan Mobil App.
Pilih salah satu fitur yang ada yaitu “Easy Tables”. Dengan Easy Table anda dapat membuat
table dengan mudah dan mengakses table tersebut menggunakan REST web services atau
menggunakan Azure Mobile App SDK pada Xamarin Forms.
67
Gambar 76. Manage schema.
Langkah selanjutnya adalah membuat easy table dengan nama Barang. Kemudian pada table
schema, tambahkan kolom baru yaitu KodeBarang, NamaBarang, Stok, HargaBeli, dan
HargaJual.
68
Gambar 78. Menambah library Microsoft.Azure.Mobile.Client.
Kemudian pada project portable tambahkan class Barang sebagai representasi dari table
Barang yang ada pada Easy Table di Azure.
using Microsoft.WindowsAzure.MobileServices;
using Newtonsoft.Json;
namespace SampleMobileAzure
{
public class Barang
{
private string _id;
[JsonProperty(PropertyName = "id")]
public string Id
{
get { return _id; }
set { _id = value; }
}
69
}
[Version]
public string Version { get; set; }
}
}
Tambahkan juga class dengan nama Constants.cs yang digunakan untuk menyimpan url dari
web services yang diakses.
namespace SampleMobileAzure
{
public static class Constants
{
public static string ApplicationURL =
@"https://actualmobileservices.azurewebsites.net";
}
}
namespace SampleMobileAzure
{
public class BarangManager
{
private IMobileServiceTable<Barang> _barangTable;
public BarangManager()
{
var client = new MobileServiceClient(Constants.ApplicationURL);
_barangTable = client.GetTable<Barang>();
}
70
Tambahkan class dengan nama ActivityIndicatorScope.cs. Class ini akan digunakan untuk
menampilkan activity indicator pada saat aplikasi mengambil data dari services.
using System.Threading.Tasks;
using Xamarin.Forms;
namespace SampleMobileAzure
{
public class ActivityIndicatorScope : IDisposable
{
private bool _showIndicator;
private ActivityIndicator _indicator;
private Task _indicatorDelay;
if (showIndicator)
{
_indicatorDelay = Task.Delay(2000);
SetIndicatorActivity(true);
}
else
{
_indicatorDelay = Task.FromResult(0);
}
}
private void SetIndicatorActivity(bool isActive)
{
_indicator.IsVisible = isActive;
_indicator.IsRunning = isActive;
}
Tambahkan halaman xaml baru dengan nama BarangPage. Halaman ini digunakan untuk
menampilkan data barang pada kontrol ListView.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="SampleMobileAzure.BarangPage" Title="List Of Barang">
<ContentPage.ToolbarItems>
<ToolbarItem Text="+" Clicked="MenuItem_OnClicked"/>
</ContentPage.ToolbarItems>
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ActivityIndicator
HorizontalOptions="Center"
VerticalOptions="Center"
IsVisible="False"
IsEnabled="True"
x:Name="syncIndicator"/>
<ListView x:Name="listViewBarang" ItemTapped="ListView_OnItemTapped"
IsPullToRefreshEnabled="True" Refreshing="ListViewBarang_OnRefreshing">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout HorizontalOptions="StartAndExpand"
Orientation="Horizontal">
<Label FontSize="16" Text="{Binding KodeBarang}" />
71
<Label FontSize="16" Text="{Binding NamaBarang}" />
<Label FontSize="16" Text="{Binding Stok}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</ContentPage.Content>
</ContentPage>
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace SampleMobileAzure
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class BarangPage : ContentPage
{
private BarangManager _barangManager = new BarangManager();
public BarangPage()
{
InitializeComponent();
}
72
list.EndRefresh();
}
if (error != null)
{
await DisplayAlert("Refresh Error !", "Couldn't refresh data (" +
error.Message + ")", "OK");
}
}
}
}
namespace SampleMobileAzure
{
73
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class TambahBarangPage : ContentPage
{
private BarangManager _barangManager = new BarangManager();
private bool _isNew = false;
public TambahBarangPage()
{
InitializeComponent();
}
74
Gambar 79. Aplikasi Xamarin Forms untuk akses Azure Mobile Apps service.
75
7
Penutup
Sebagai penutup, ebook ini ditulis untuk para web developer yang ingin membangun aplikasi
mobile lintas platform dengan Xamarin Forms.
Ebook ini masih membahas hal-hal dasar tentang pembangunan aplikasi mobile dengan
Xamarin. Harapannya pada ebook selanjutnya akan membahas topik lain tentang
pembangunan aplikasi mobile Xamarin Forms.
Akhir kalimat, jika ada kritik dan saran dapat ditujukan langsung via email ke alamat
erick.kurniawan@gmail.com.
76