Kotlinized : Program Faktorial menggunakan Kotlin

Kotlinized : Program Faktorial menggunakan Kotlin

Halo teman – teman, pada artikel kali ini kita akan membahas mengenai pembuatan program yang akan menghasilkan faktorial dari sebuah bilangan pada bahasa Kotlin.

Dalam matematikafaktorial dari bilangan asli n yaitu hasil perkalian selang bilangan bulat positif yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan dinamakan n faktorial.

Sebagai contoh, 4! yaitu mempunyai nilai 1×2×3×4 = 24.

Pada program Kotlin faktorial ini kita akan mengambil bilangan bulat dan menampilkan faktorial dari bilangan tersebut dan menghitung nilai nya menggunakan looping.

Program

fun main() {
    var result: Int = 1
    println("Masukkan bilangan bulat : ")
    var n: Int = readLine()!!.toInt();
    if (n <= 0){
        print("Angka yang dimasukkan bukan bilangan bulat atau adalah angka 0")
    } else {
        for (i in 1..n) {
            result *= i
        }
        print("Angka faktorial " + n + " adalah " + result)
    }
}

Output nya adalah

Masukkan bilangan bulat : 
4
Angka faktorial 4 adalah 24

Penjelasan

  • Kita akan membuat programnya di dalam method main. Buat variabel penampung hasil faktorial nya. Selanjutnya, buat variabel penampung hasil input user dari console. Jangan lupa untuk mengubah tipe data dari masukan user menjadi integer.
var result: Int = 1
println("Masukkan bilangan bulat : ")
var n: Int = readLine()!!.toInt();
  • Kita cek terlebih dahulu apakan nilai yang dimasukkan oleh user lebih dari 0. Jika nilai n kurang dari 0 maka akan di keluarkan output gagal.
if (n <= 0){
   print("Angka yang dimasukkan bukan bilangan bulat atau adalah angka 0")
} else {
   // Program           
}
  • Selanjutnya, di bagian blok else kita buat loopingnya terlebih dahulu.
for (i in 1..n) {
   // operasi
}

blok looping tersebut akan dijalankan ketika nilai i masih kurang atau sama dengan dari nilai yang diinputkan oleh user.

Di dalam blok looping nya kita panggil variabel faktorial yang nilai nya akan dikalikan dengan variable i

for (i in 1..n){
    faktorial *= i
}

Sehingga hasilnya akan menjadi seperti ini.

n = 4
faktorial = 1 * 1 = 1
faktorial = 1 * 2 = 2
faktorial = 2 * 3 = 6
faktorial = 6 * 4 = 24

  • Jangan lupa untuk mengeluarkan outputnya. Jangan lupa untuk format angka nya dijadikan menjadi string dengan memakai String.valueOf().
print("Angka faktorial " + n + " adalah " + result)

Oke teman teman, sekian dulu artikel kali ini. Sampai jumpa di artikel berikutnya.

Flutterize : Program Faktorial menggunakan Dart

Flutterize : Program Faktorial menggunakan Dart

Halo teman – teman, pada artikel kali ini kita akan membahas mengenai pembuatan program yang akan menghasilkan faktorial dari sebuah bilangan pada bahasa Dart.

Dalam matematikafaktorial dari bilangan asli n yaitu hasil perkalian selang bilangan bulat positif yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan dinamakan n faktorial.

Sebagai contoh, 4! yaitu mempunyai nilai 1×2×3×4 = 24.

Pada program Dart faktorial ini kitaakan mengambil bilangan bulat dan menampilkan faktorial dari bilangan tersebut dan menghitung nilai nya menggunakan looping.

Program

import 'dart:io';

void main() {
  int faktorial = 1;
  print("Masukkan bilangan bulat : ");
  int? n = int.parse(stdin.readLineSync()!);
  if (n < 0){
    print("Angka yang dimasukkan bukan bilangan bulat");
  } else {
    for (int i = 1; i <= n; i++){
      faktorial *= i;
    }
    print("Hasil faktorial dari " + n.toString() + " adalah " + faktorial.toString());
  }
}

Output nya adalah

Masukkan bilangan bulat : 
4
Hasil faktorial dari 4 adalah 24

Penjelasan

  • Yang pertama, kita import library io untuk mengambil input dan mengeluarkan output dari console atau command line.
import 'dart:io';
  • Lalu, kita buat programnya di dalam method main. Buat variabel penampung hasil faktorial nya. Selanjutnya, buat variabel penampung hasil input user dari console.
int? n = int.parse(stdin.readLineSync()!);
  • Kita cek terlebih dahulu apakan nilai yang dimasukkan oleh user lebih dari 0. Jika nilai n kurang dari 0 maka akan di keluarkan output gagal.
if (n <= 0){
   print("Angka yang dimasukkan bukan bilangan bulat atau adalah angka 0");
} else {
   // Program
}
  • Selanjutnya, di bagian blok else kita buat loopingnya terlebih dahulu.
for (int i = 1; i <= n; i++){
  // Operasi
}

blok looping tersebut akan dijalankan ketika nilai i masih kurang atau sama dengan dari nilai yang diinputkan oleh user.

Di dalam blok looping nya kita panggil variabel faktorial yang nilai nya akan dikalikan dengan variable i

for (int i = 1; i <= n; i++){
    faktorial *= i;
}

Sehingga hasilnya akan menjadi seperti ini.

n = 4
faktorial = 1 * 1 = 1
faktorial = 1 * 2 = 2
faktorial = 2 * 3 = 6
faktorial = 6 * 4 = 24

  • Terakhir, jangan lupa untuk mengeluarkan outputnya.
print("Hasil faktorial dari " + n.toString() + " adalah " + faktorial.toString());

Oke teman teman, sekian dulu artikel kali ini. Sampai jumpa di artikel berikutnya.

Kotlinized : Cara Manipulasi String pada Kotlin

Kotlinized : Cara Manipulasi String pada Kotlin

Halo teman – teman, pada artikel kali ini kita akan membahas mengenai manipulasi variable tipe dengan tipe data String pada bahasa Kotlin.

String merupakan salah satu tipe data non – primitif yang digunakan untuk menampung kalimat, kata – kata, atau kumpulan karakter.

Terkadang, dalam dunia pemrograman ada kasus dimana kita harus melakukan penggabungan kalimat, pemisahan kalimat, merubah sebuah kalimat menjadi huruf kapital, dan lainnya. Operasi tersebut disebut dengan manipulasi String.

Pada bahasa pemrograman Kotlin sendiri disediakan beberapa fungsi yang digunakan untuk operasi manipulasi String. Kita akan bahas satu persatu.

1. Concat

Untuk menggabungkan beberapa kata atau Kalimat pada Kotlin, disebut dengan concatenation. Di Kotlin sendiri ada beberapa cara yang populer untuk melakukan concat.

// Menggunakan karakter (+) : 
var namaDepan = "Rafi"
var namaBelakang = "Izzatul"
var namaLengkap = namaDepan + " " + namaBelakang
println(namaLengkap)
// output : Rafi Izzatul
// Menggunakan interpolasi
var namaDepan = "Rafi"
var namaBelakang = "Izzatul"
var namaLengkap = "$namaDepan $namaBelakang"
println(namaLengkap)
// output : Rafi Izzatul

2. Substring

Substring merupakan fungsi yang digunakan untuk mengambil beberapa karakter dari sebuah Kalimat atau kata. Fungsi ini memiliki 2 parameter, yaitu index awalan dan juga index akhir. Indexnya diambil sesuai dengan urutan karakter yang ada di Kalimat tersebut. (Karakter pertama berindex 0).

var namaLengkap = "Rafi Izzatul"
var namaBelakang = namaLengkap.substring(5, 12)
println(namaBelakang)
// output : Izzatul

3. Contains

Untuk mengecek Apakah sebuah Kalimat mengandung karakter yang kita tentukan atau tidak, kita bisa memakan fungsi contains. Fungsi ini akan mengembalikan atau menghasilkan boolean true jika Kalimat tersebut mengandung karakter yang kita inputkan. Sebaliknya, fungsi contains akan menghasilkan boolean false jika Kalimat tersebut tidak mengandung Kalimat yang kita inputkan.

var namaLengkap = "Rafi Izzatul"
println(namaLengkap.contains("afi"))
// output : true

println(namaLengkap.contains("Faris"))
// output : false

4. ToLowerCase

ToLowerCase adalah fungsi yang digunakan untuk merubah Kalimat atau karakter menjadi huruf kecil. 

var namaDepan = "RAFI"
println(namaDepan.toLowerCase())
// output : rafi

5. ToUpperCase

Kebalikan dari fungsi ToLowerCase, fungsi ToUpperCase adalah fungsi yang digunakan untuk merubah Kalimat atau karakter menjadi huruf kapital.

var namaBelakang = "izzatul"
println(namaBelakang.toUpperCase())
// output : IZZATUL 

6. Replace

Fungsi Replace merupakan fungsi yang digunakan untuk mengganti karakter yang ada di dalam String menjadi karakter baru yang kita inginkan. Fungsi ini mempunyai 2 parameter. Parameter yang pertama berisi karakter apa yang ingin kita ganti dalam sebuah string. Parameter yang kedua berisi karakter baru yang akan menggantikan karakter lama yang kita isi pada parameter pertama.

var greeting = "Hai"
println(greeting.replace("a", "e"))
// output : Hei

7. Length

Length adalah fungsi yang digunakan untuk menghitung berapa banyak jumlah karakter yang ada di dalam sebuah String.

var namaLengkap = "Rafi Izzatul"
println(namaLengkap.length)
// output : 12

Oke teman teman, sekian dulu artikel kali ini. Sampai jumpa di artikel berikutnya.

Flutterize : Cara Manipulasi String pada Dart

Flutterize : Cara Manipulasi String pada Dart

Halo teman – teman, pada artikel kali ini kita akan membahas mengenai manipulasi variable tipe dengan tipe data String pada bahasa Dart.

String merupakan salah satu tipe data non – primitif yang digunakan untuk menampung kalimat, kata – kata, atau kumpulan karakter.

Terkadang, dalam dunia pemrograman ada kasus dimana kita harus melakukan penggabungan kalimat, pemisahan kalimat, merubah sebuah kalimat menjadi huruf kapital, dan lainnya. Operasi tersebut disebut dengan manipulasi String.

Pada bahasa pemrograman Dart sendiri disediakan beberapa fungsi yang digunakan untuk operasi manipulasi String. Kita akan bahas satu persatu.

1. Concat

Untuk menggabungkan beberapa kata atau Kalimat pada Dart, disebut dengan concatenation. Di Dart sendiri ada beberapa cara yang populer untuk melakukan concat.

// Menggunakan karakter (+) : 
String namaDepan = "Rafi";
String namaBelakang = "Izzatul";
String namaLengkap = namaDepan + " " + namaBelakang;
print(namaLengkap); 
// output : Rafi Izzatul
// Menggunakan interpolasi
String namaDepan = "Rafi";
String namaBelakang = "Izzatul";
String namaLengkap = "$namaDepan $namaBelakang";
print(namaLengkap); 
// output : Rafi Izzatul

2. Substring

Substring merupakan fungsi yang digunakan untuk mengambil beberapa karakter dari sebuah Kalimat atau kata. Fungsi ini memiliki 2 parameter, yaitu index awalan dan juga index akhir. Indexnya diambil sesuai dengan urutan karakter yang ada di Kalimat tersebut. (Karakter pertama berindex 0).

String namaLengkap = “Rafi Izzatul”;
String namaBelakang = namaLengkap.substring(5, 12);
print(namaBelakang); 
// output : Izzatul

3. Contains

Untuk mengecek Apakah sebuah Kalimat mengandung karakter yang kita tentukan atau tidak, kita bisa memakan fungsi contains. Fungsi ini akan mengembalikan atau menghasilkan boolean true jika Kalimat tersebut mengandung karakter yang kita inputkan. Sebaliknya, fungsi contains akan menghasilkan boolean false jika Kalimat tersebut tidak mengandung Kalimat yang kita inputkan.

String namaLengkap = "Rafi Izzatul";
print(namaLengkap.contains("afi")); 
// output : true

print(namaLengkap.contains("Faris")); 
// output : false

4. ToLowerCase

ToLowerCase adalah fungsi yang digunakan untuk merubah Kalimat atau karakter menjadi huruf kecil. 

String namaDepan = "RAFI";
print(namaDepan.toLowerCase()); 
// output : rafi

5. ToUpperCase

Kebalikan dari fungsi ToLowerCase, fungsi ToUpperCase adalah fungsi yang digunakan untuk merubah Kalimat atau karakter menjadi huruf kapital.

String namaBelakang = "izzatul";
print(namaBelakang.toUpperCase()); 
// output : IZZATUL 

6. ReplaceAll

Fungsi ReplaceAll merupakan fungsi yang digunakan untuk mengganti karakter yang ada di dalam String menjadi karakter baru yang kita inginkan. Fungsi ini mempunyai 2 parameter. Parameter yang pertama berisi karakter apa yang ingin kita ganti dalam sebuah string. Parameter yang kedua berisi karakter baru yang akan menggantikan karakter lama yang kita isi pada parameter pertama.

String greeting = "Hai";
print(greeting.replaceAll("a", "e")); 
// output : Hei

7. Length

Length adalah fungsi yang digunakan untuk menghitung berapa banyak jumlah karakter yang ada di dalam sebuah String.

String namaLengkap = "Rafi Izzatul";
print(namaLengkap.length); 
// output : 12

Oke teman teman, sekian dulu artikel kali ini. Sampai jumpa di artikel berikutnya.

8 Aplikasi Pertanian yang Bermanfaat Bagi Petani dan Konsumen

8 Aplikasi Pertanian yang Bermanfaat Bagi Petani dan Konsumen

Indonesia merupakan negara agraris, yang berarti, pertanian/perkebunan merupakan salah satu mata pencahariaan terbanyak. Sebagai negara agraris, Indonesia memiliki beragam kekayaan alam yang melimpah. DItambah lagi dengan posisinya yang cukup strategis, memiliki beberapa gunung api, yang membuat kandungan tanahnya subur dan kaya akan mineral.

Sebagai negara agraris, Indonesia dapat menghasilkan berbagai komoditas pangan dan juga terkenal akan rempah-rempahnya. Indonesia pernah tercatat mengalami masa swasembada pangan pada era 1980-an. Tetapi, Indonesia kerap kali mengimpor pangan dari negara lain. Hal ini dapat terjadi karena berbagai faktor, diantaranya persediaan terbatas/sesuai musim saja, harga yang bergejolak dan adanya permainan curang pada rantai distribusi.

Oleh sebab itu, kini mulai bermunculan aplikasi digital untuk membantu berbagai masalah yang ada pada bidang pertanian/perkebunan.

Eragano, menyediakan solusi dari hulu hingga hilir sector pertanian. Digagas oleh Stephanie Jesselyn dan Aris Hendrawan dan telah mendapatkan pendanaan dari East Venture pada Juli 2016. Solusi yang ditawarkan antara lain : penjualan perlengkapan pertanian dan juga pupuk, penjualan hasil panen, system pengelolaan sawah dan pinjaman bagi petani.

iGrow, merupakan platform investasi pertanian dan bisa dipantau secara online. Aplikasi yang digagas oleh Andreas Senjaya dan Jim Oklahoma, juga telah mendapatkan pendanaan tahap awal pada Juli 2016. iGrow menghubungkan investor, petani dan pembeli.

8Villages, merupakan perusahaan yang membuat aplikasi Petani dan RegoPantes. Aplikasi Petani ditujukan untuk para petani yang ingin konsultasi terkait tanaman kepada para pakar pertanian, dan memungkinkan petani untuk mengirim foto tanamannya. Aplikasi ini juga berfungsi sebagai forum online untuk berbagi informasi.

Sedangkan RegoPantes merupakan aplikasi yang memungkinkan petani untuk menjual hasil pertanian langsung kepada konsumen, sehingga mereka bisa mendapatkan harga yang layak dibanding menjual kepada distributor.

SayurBox, aplikasi yang menyediakan layanan pemesanan sayur organik segar yang baru dipanen. Dengan system PO (memesan sayuran sebelumnya), hingga saatnya tiba, tim SayurBox akan mengirimkan sayuran langsung kerumah konsumen. Namun layanan ini baru menjangkau daerah Jakarta dan Tangerang.

Simbah, aplikasi yang menyediakan forum untuk berbagi informasi/Tanya jawab perihal pertanian, juga dapat membantu petani untuk menjual hasil pertanian langsung ke konsumen.

Karsa, menyediakan informasi pertanian kepada petani, produsen pertanian dan juga pemerintah. Dengan aplikasi ini, petani dapat mengetahui cara menanam yang baik, pemerintah dapat mengetahui apa saja yang dibutuhkan petani, dan juga memantau harga komoditas di pasar.

Kecipir, sebelumnya bernama LOFMart namun karena merasa namanya kurang menjual, maka diubah menjadi Kecipir. Digagas oleh Tantyo Bangun, platform ini menyediakan penjualan sayur organic dan dapat melayani konsumen untuk wilayah Jabodetabek.

Referensi :

  1. Iwan Supriyatna. Kompas. Negara Agraris, Mengapa Harga Pangan di Indonesia Bergejolak?
  2. Aditya Hadi Pratama. [Update] Kumpulan Startup dan Aplikasi Pertanian di Indonesia.

Membuat Aplikasi CRUD Sederhana di Android Menggunakan PHP dan MySQL PART 3

 

  1. Pertama buat sebuah package baru dengan nama activities.                    
  2. Lalu buatlah sebuah activty (Empty Activity) dalam folder activities dengan nama FormActivity
  3. Lalu masuk ke appres > layout > activity_form.xml . Masukkan source code di bawah
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="20dp"
        tools:context="id.co.contactperson.contactperson.activities.FormActivity">
    
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <EditText
                android:id="@+id/et_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Nama :"
                android:inputType="textPersonName"
                android:maxLines="1"
                android:singleLine="true" />
    
        </android.support.design.widget.TextInputLayout>
    
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <EditText
                android:id="@+id/et_contact_number"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="No Telp :"
                android:inputType="number"
                android:maxLength="15"
                android:singleLine="true" />
    
        </android.support.design.widget.TextInputLayout>
    
        <Button
            android:id="@+id/btn_simpan"
            style="?android:textAppearanceSmall"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:text="Simpan"
            android:textAllCaps="false"
            android:textStyle="bold" />
    
    </LinearLayout>
    
    
  4. Lalu masuk ke app > res > layout > activity_main.xml . Masukkan source code di bawah
    
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:padding="20dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="id.co.contactperson.contactperson.MainActivity>
    
        <ListView
            android:id="@+id/lv_person_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
        </ListView>
    </FrameLayout>
    
    
  5. Kemudian buat sebuah layout dengan nama item_person
  6. Lalu klik Finish .
  7. Lalu masuk ke app > res > layout >item_person.xml . Masukkan source code di bawah
    
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">
    
        <android.support.v7.widget.CardView
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp">
    
            &amp;lt;LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:padding="5dp"&amp;gt;
    
                <TextView
                    android:id="@+id/tv_name"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:text="Nama :"
                    android:textSize="20sp"
                    android:textStyle="bold" />
    
                <TextView
                    android:id="@+id/tv_contact_number"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:text="No :"
                    android:textSize="20sp" />
    
            </LinearLayout>
    
        </android.support.v7.widget.CardView>
    </FrameLayout>
    
    
  8. Buatlah sebuah package dengan nama adapters                                           
  9. Buatlah sebuah file di dalam package adapters dengan nama PersonItemAdapter 
  10. Masuk ke file PersonItemAdapter.java , kemudian isi dengan source code di bawah
    
    public class PersonItemAdapter extends ArrayAdapter<Person> {
    
        private List<Person> personList;
        private Context context;
        private LayoutInflater layoutInflater;
    
        public PersonItemAdapter(@NonNull Context context, List<Person> persons) {
            super(context, R.layout.item_person ,persons);
            this.context=context;
            personList=persons;
            layoutInflater=LayoutInflater.from(context);
        }
    
        @Override
        public int getCount() {
            return personList.size();
        }
    
        @Nullable
        @Override
        public Person getItem(int position) {
            return personList.get(position);
        }
    
        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            View view=convertView;
    
            if(view==null){
    
                view=layoutInflater.inflate(R.layout.item_person,null);
            }
            TextView name=view.findViewById(R.id.tv_name);
            TextView contactNunmber=view.findViewById(R.id.tv_contact_number);
    
            Person person=getItem(position);
    
            //Kasih nilai ke Person_item layout
            name.setText(person.getPersonName());
            contactNunmber.setText(person.getContactNumber());
    
            return view;
        }
    }
    
    
  11. Masuk ke file MainActivity.java , kemudian isi dengan source code di bawah
    
    public class MainActivity extends AppCompatActivity  {
    
        @BindView(R.id.lv_person_list)
        ListView lvPersonList;
    
        List<Person> personItemList;
        PersonItemAdapter personItemAdapter;
    
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ButterKnife.bind(this);
    
            //Masukkan adapter ke listView
            personItemAdapter = new PersonItemAdapter(this, personItemList);
    
        
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            getAllPerson(generateToken());
            personItemAdapter.notifyDataSetChanged();
        }
        
    
        private String generateToken() {
    
            SecureRandom random = new SecureRandom();
            byte bytes[] = new byte[20];
            random.nextBytes(bytes);
            return bytes.toString();
        }
    
        public void getAllPerson(final String token) {
    
            ApiEndPoint apiEndPoint = ApiClient.getClient().create(ApiEndPoint.class);
            Call<ReadResponse> call = apiEndPoint.readRequest(token);
    
            call.enqueue(new Callback<ReadResponse>() {
                @Override
                public void onResponse(Call<ReadResponse> call, Response<ReadResponse> response) {
    
                    final ReadResponse readResponse = response.body();
    
                    if (readResponse != null) {
                        Log.d("Response Data ", "Total Data" + readResponse.getStatus());
                        if (readResponse.getStatus()) {
    
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
    
                                    personItemList = readResponse.getPersons();
    
                                    lvPersonList.setAdapter(new PersonItemAdapter(getApplicationContext(), personItemList));
                                    personItemAdapter.notifyDataSetChanged();
                                }
                            });
    
                        } else {
                            Toast.makeText(getApplicationContext(), "Data Kosong", Toast.LENGTH_SHORT).show();
                        }
    
                    } else {
                        Log.d("Login : ", "Data Null");
                    }
                }
    
                @Override
                public void onFailure(Call<ReadResponse> call, Throwable t) {
                    Toast.makeText(getApplicationContext(), "Koneksi Bermasalah", Toast.LENGTH_SHORT).show();
    
                }
            });
        }
    
    }
    
    
  12. Lalu masuk ke app > manifests > AndroidManifest.xml  . Tambahkan perizinan untuk koneksi ke internet<uses-permission android:name=”android.permission.INTERNET” />
  13. Sekarang kita coba running dengan emulator . Klik tombol hijau yang ada di menu bar    
  14. Pilih emulator yang ingin anda gunakan, lalu klik OK. 

Membuat Aplikasi CRUD Sederhana di Android Menggunakan PHP dan MySQL PART 2

  1. Buka Android Studio anda. Klik Start a new Android Studio project .
  2. Isi data seperti gambar dibawah ini , untuk Project location sesuaikan dengan directory anda. Kemudian klik Next.
  3. Isi data seperti gambar dibawah ini. Kemudian klik Next.
  4. Pilih Empty Activity Isi data seperti gambar dibawah ini. Kemudian klik Next.
  5. Kemudian klik Finish.
  6. Jika berhasil, akan muncul tampilan seperti gambar dibawah ini.
  7. Kita install library lewat Gradle . Klik Gradle Scripts -> pilih build.gradle (Module:app)
  8. Masukkan code berikut                                                                                                                                            //Install Library Tambahan
    implementation ‘com.android.support:design:26.1.0’
    implementation ‘com.android.support:cardview-v7:26.1.0’
    //BindView
    implementation ‘com.jakewharton:butterknife:8.8.1’
    annotationProcessor ‘com.jakewharton:butterknife-compiler:8.8.1’//Retrofit
    implementation ‘com.squareup.retrofit2:retrofit:2.3.0’
    //GSON Converter
    implementation ‘com.squareup.retrofit2:converter-gson:2.3.0’
  9. Kemudian pilih app -> java -> id.co.contactperson.contactperson lalu klik kanan seperti gambar dibawah
  10. Isikan nama Package Name services Kemudian klik OK.
  11. Sekarang kita akan buat file .java di dalam package services. Klik kanan pada package services seperti gambar dibawah ini.
  12. Pada isian kolom Name : kita isi dengan ApiClient . Lalu klik OK.
  13. Isikan file java dengan Source Code dibawah ini. Class ini digunakan untuk memulai koneksi dengan API ContactPerson. Untuk Ip dan Nama Folder Server sesuaikan dengan koneksi anda.
  14. Kemudian buatlah sebuah package seperti cara no 9 dengan nama responses.
  15. Kemudian buatlah sebuah file .java seperti cara no 11. Pada kolom isian Name : isi dengan ApiEndPoint lalu kolom Kind : pilih Interface . Lalu klik OK.
  16. Jika berhasil, tampak seperti gambar dibawah.                                                     
  17. Sebelum kita membuat fungsi Interface ApiEndPoint, kita buat file di package responses untuk meresponse data dari server. Balik lagi ke phpMyAdmin pilih databse contact_person -> person lalu pilih menu bar Insert. Isi data seeperti gambar dibawah, kemudian klik Go
  18. Buka file php pada folder ContactPerson kemudian ubah sementara source code nya seperti gambar di bawah. Save file yang sudah diubah.
  19. Buka localserver ContactPerson , isikan url dengan http://localhost/ContactPerson/read.php
  20. Untuk mendapatkan tampilan data JSON seperti gambar di atas, anda perlu install JSON VIEWER pada web browser anda. Kemudian tekan Crtrl + U pada URL di atas.
  21. Copy isi source data dalam satu baris dari view-source.
  22. Masuk ke link ini http://jsonschema2pojo.org kemudian paste di kotak yang ada. Isi kolom Package sesuai package pada file ApiEndPoint.java lalu isi Class name dengan ReadResponse .
  23. Lalu klik Zip                                                                                             
  24. Lalu klik tulisan warna biru ( ReadResponse-sources.zip ) untuk mendownload
  25. Extract file nya, sampai ada folder baru dengan nama id
  26. Masuk ke dalam folder id sampai ketemu 2 file berikut
  27. Copy 2 file diatas, lalu paste di dalam folder responses pada Android Studio
  28. Lalu buat file StatusResponse.java di dalam folder responses. Kemudian isi kan code berikut
  29. Ok sekarang anda buka file read.php, kemudian kita ubah lagi code nya ke bentuk awal. Jangan lupa untuk save file nya.                 
  30. Balik lagi keApiEndPoint.java java , isi kan code di bawah ini.
    
    public interface ApiEndPoint {
    
        @FormUrlEncoded
        @POST("read.php")
        Call<ReadResponse> readRequest(@Field("key") String key);
    
        @FormUrlEncoded
        @POST("readPerson.php")
        Call<ReadResponse> readPersonRequest(@Field("key") String key,@Field("id") int id);
    
        @FormUrlEncoded
        @POST("create.php")
        Call<StatusResponse> createRequest(@Field("name") String name,
                                           @Field("contact_number") String contact_number);
    
        @FormUrlEncoded
        @POST("update.php")
        Call<StatusResponse> updateRequest(@Field("id") int id,
                                           @Field("name") String name,
                                           @Field("contact_number") String contact_number);
    
        @FormUrlEncoded
        @POST("delete.php")
        Call<StatusResponse> deleteRequest(@Field("id") int id);
    
    }
    
    

     

Membuat Aplikasi CRUD Sederhana di Android Menggunakan PHP dan MySQL PART 1

    1. Aktifkan xampp anda terlebih dahulu. Tekan      pada keyboard anda, lalu ketik xampp .
    2. Klik Start pada Apache serta MySQL
    3. Kemudian buka salah satu Web Browser Anda Google Chrome, Mozilla, dll. Lalu ketik http://localhost/dashboard/ pada link URL anda.
    4. Jika sudah muncul tampilan seperti gambar di atas, klik  phpMyAdmin.
    5. Klik New.
    6. Isikan nama tabel dengan contact_person . Lalu klik Create.
    7. Isikan kolom Name : dengan person serta Number of columns: 3 . Kemudian klik Go.
    8. Isikan struktur tabel seperti gambar dibawah. Kemudian klik Save.
    9. Jika berhasil, maka muncul tampilan seperti ini. 
    10. Sekarang, kita membuat folder untuk Masuk ke folder htdocs anda. Secara default ada di C:\xampp\htdocs . Kemudian buat folder baru dengan nama ContactPerson.
    11. Buka SublimeText anda, lalu masuk ke folder Klik File -> Open Folder … . Pilih Lokasi C:\xampp\htdocs , lalu klik Select Folder.
    12. Sekarang buat file namakan dengan index.php yang berguna untuk menampilkan Tulisan Contact Person API  v.1.0 pada halaman index. Isikan file tersebut dengan soruce code di bawah ini .
      
      <?php class ContactPersonApi { public function index() { echo "Contact Person API v.1.0"; } } $contactPersonApi=new ContactPersonApi(); $contactPersonApi->index();
      
      
    13. Sekarang buat file namakan dengan models.php yang berguna untuk melakukan koneksi ke databse, serta CRUD query. Isikan file tersebut dengan soruce code di bawah ini .
      
      <?php class database{ //Fungsi constructor untuk membuat koneksi ke database public function __construct(){ $this->db=new PDO('mysql:host=localhost;dbname=contact_person','root','');
      	}
      
      		//Fungsi query untuk mendapatkan data dari database
      	public function getPersons(){
      		$query="SELECT * FROM person ";
      		$sql=$this->db->query($query);
      		return $sql;
      	}
      
      	public function getPerson($Id){
      		$query="SELECT * FROM person  where  id=$Id  LIMIT 1";
      		$sql=$this->db->query($query);
      		return $sql;
      	}
      
      	public function setPerson($Name,$ContactNumber){
      		$query="INSERT into person VALUES(null,'$Name','$ContactNumber')";
      		$sql=$this->db->query($query);
      		return $sql;
      	}
      
      	public function updatePerson($Id,$Name,$ContactNumber){
      		$query="UPDATE person SET person_name='$Name',contact_number='$ContactNumber' where id=$Id";
      		$sql=$this->db->query($query);
      		return $sql;
      	}
      
      	public function deletePerson($Id){
      		$query="DELETE FROM person  where  id=$Id  ";
      		$sql=$this->db->query($query);
      		return $sql;
      	}
      
      }
      
      
    14. Sekarang buat file namakan dengan create.php yang berguna untuk menyimpan data ke database. Isikan file tersebut dengan soruce code di bawah ini .
      
      <?php include 'models.php'; //Mengambil Data Dari Android $name=$_REQUEST['name']; $contactNumber=$_REQUEST['contact_number']; //Membuat objek dari class database $MakeConnection=new database(); $MakeConnection->setPerson($name,$contactNumber);
      
      	//mengirim data ke android dengan format JSON 
      echo json_encode(array('status'=>true));
      
      ?>
      
      
    15. Sekarang buat file namakan dengan update.php yang berguna untuk merubah isi data ke database. Isikan file tersebut dengan soruce code di bawah ini .
      
      <?php include 'models.php'; //Mengambil Data Dari Android $id=$_REQUEST['id']; $name=$_REQUEST['name']; $contactNumber=$_REQUEST['contact_number']; //Membuat objek dari class database $MakeConnection=new database(); $MakeConnection->updatePerson($id,$name,$contactNumber);
      
      	//mengirim data ke android dengan format JSON 
      echo json_encode(array('status'=>true));
      
      ?>
      
      
    16. Sekarang buat file namakan dengan delete.php yang berguna untuk menghapus isi data dari database. Isikan file tersebut dengan soruce code di bawah ini .
      
      <?php include 'models.php'; //Mengambil Data Dari Android $id=$_REQUEST['id']; //Membuat objek dari class database $MakeConnection=new database(); $MakeConnection->deletePerson($id);
      
      	//mengirim data ke android dengan format JSON 
      echo json_encode(array('status'=>true));
      
      ?>
      
      
    17. Sekarang buat file namakan dengan read.php yang berguna untuk mendapatkan semua  data person dari database. Isikan file tersebut dengan soruce code di bawah ini .
      
      <?php include 'models.php'; //Mengambil Data Dari Android $key=$_REQUEST['key']; if (empty($key)) { echo " UnAuthorization User"; }else{ $MakeConnection=new database(); //membuat variable array $jsonResponse=array(); $getObject=$MakeConnection->getPersons();
      	
      	while ($row=$getObject->fetch(PDO::FETCH_OBJ)) {
      		$jsonResponse[]=$row;
      	}
      	
      	//mengirim data ke android dengan format JSON 
      	echo json_encode(array('status'=>true,'persons'=>$jsonResponse));	
      }
      
      ?>
      
      

      18. Sekarang buat file namakan dengan readPerson.php yang berguna untuk mendapatkan semua data person dari database. Isikan file tersebut dengan soruce code di bawah ini .

      
      <php
      include 'models.php';
      
      	//Mengambil Data Dari Android
      $key=$_REQUEST['key'];	
      
      if (empty($key)) {
      	echo " UnAuthorization User";
      }else{
      
      	$MakeConnection=new database();	
      	//membuat variable array
      
      	$jsonResponse=array();
      	$id=$_REQUEST['id'];
      	$getObject=$MakeConnection->getPerson($id);
      	
      	while ($row=$getObject->fetch(PDO::FETCH_OBJ)) {
      		$jsonResponse[]=$row;
      	}
      	
      	//mengirim data ke android dengan format JSON 
      	echo json_encode(array('status'=>true,'persons'=>$jsonResponse));	
      }
      
      ?>
      
      

60 Aplikasi Android Untuk Blog Non Komersil

Menyambut Ramadhan 1438H, Rumah Coding memberi kesempatan kepada pemiliki blog yang bersifat non komersil untuk memiliki versi android dari blog tersebut secara gratis.

Jika Anda adalah admin dan pengurusan sebuah blog non komersil, anda dapat mengajukan pembuatan aplikasi Android untuk blog anda tersebut. Dengan ketentuan:

  1. Pembuatan aplikasi android hanya berlaku untuk blog non komersil.
  2. Pembuatan aplikasi android tidak bersifat custom. Hanya mengikuti format aplikasi yang kami tawarkan.
  3. Tidak ada iklan apapun dalam aplikasi.
  4. Gratis upload ke Google Play Store menggunakan akun Rumah Coding.
  5. Hanya untuk 60 blog yang terpilih.
  6. Hanya admin dan pengurus blog terkait yang dapat mengajukan pembuatan aplikasi android. Anda tidak diperkenan mengajukan blog yang bukan milik anda. Pada form pengajuan anda akan diminta menyertakan screenshot dashboard dari blog anda untuk otentikasi.

Tampilan aplikasi android untuk blog kurang lebih akan seperti ini:

Tahapan pembuatan aplikasi android:

  1. Mengisi form di bawah paling lambat tanggal 24 Juni 2017.
  2. Blog yang terpilih akan dihubungi secara bertahap melalui whatsapp atau email pada tanggal 1-7 Juli 2017.
  3. Peserta yang terpilih akan diminta melengkapi berbagai macam data untuk keperluan upload ke Google Play Store, seperti icon, deskripsi dan lain-lain.
  4. Proses pembuatan dan upload ke Google Play Store secara bertahap pada tanggal 8-15 Juli 2017

 

Menampilkan Data dari MySQL ke Dalam List View Pada Android Menggunakan PHP

Pada tutorial ini, anda akan belajar membuat sebuah aplikasi android sederhana yang menggunakan List View. Data yang akan ditampilkan adalah kumpulan aplikasi android yang populer di Play Store lengkap dengan icon, total download dan data rating dari masing-masing aplikasi. Data total download dan rating yang kita gunakan dalam tutorial ini bukan merupakan data asli, akan tetapi hanya berupa data dumi untuk tujuan demo.

Data dumi tersebut akan disimpan dalam database MySQL. Kemudian anda juga akan membuat script PHP yang akan mengambil data dumi tadi dari database MySQL. Aplikasi android yang anda buat kemudian memanggil script PHP tadi untuk mengambil data dumi dalam format JSON (Javascript Object Notation). Sebelum saya menjelaskan tahap-tahap pembuatan aplikasi tersebut. Saya akan menjelaskan terlebih dahulu konsep-konsep dasar yang perlu anda pahami.

 

Mengenal JSON

JSON (Javascript Object Notation) merupakan format pertukaran data. Sebuah objek JSON merupakan kumpulan dari pasangan key dan value yang diawali dengan tanda “{” dan diakhiri dengan tanda “}”. Berikut ini adalah contoh sebuah objek JSON yang akan anda gunakan dalam tutorial ini.

var json = {
    'title' : 'Facebook',
    'rating' : 5,
    'total_dl' : 10990998,
    'icon' : 'facebook'
};

Sebuah array dari JSON merupakan serangkaian object JSON. Di bawah ini merupakan contoh array dari beberapa objek JSON di atas.

var json = [
    {'title' : 'Facebook',
    'rating' : 5,
    'total_dl' : 10990998,
    'icon' : 'facebook'},
    {'title' : 'Twitter',
    'rating' : 5,
    'total_dl' : 12343487,
    'icon' : 'twitter'},
    {'title' : 'Whatsapp',
    'rating' : 4,
    'total_dl' : 5635989,
    'icon' : 'whatsapp'}
    ];

 

Konsep Dasar

 

As I’ve stated before, we’ll create simple android application that show a list of top application. We use android list view to display the data. The list data come from MySQL server. So this application will have a http connection feature. Communication between server and android application is use JSON based data. In this tutorial we’ll use apached server in localhost that running AVD (Android Virtual Device).
The data that are fetched from server including applicatoin title, rating, total download and icon name. For simplicity of the tutorial, we’ll use an icons that are saved in /res/drawable folder for applications. This will reduce the complexity of downloading the icons from server.
Below is final screenshot of our tutorial

Populate Listview Using JSON
Populate Listview Using JSON

Server Side Task

1. Creating A Database in MySQL

Before creating a database in MySQL, make sure you’ve create a user to login into the MySQL server. In this tutorial, we use a default user root with blank password.
We’ll create a simple database scheme for the application. The database will be used to store application data. Execute the following sql to create such database.

CREATE DATABASE apps;

Now, we have a database apps. We need to create a table in database apps that will store the application title, total download, rating and icon file name. Execute the following sql to create the table.

CREATE TABLE `app_data`(
    `id` int unsigned NOT NULL AUTO_INCREMENT,
    `app_title` varchar(150) NOT NULL,
    `total_dl` int unsigned NOT NULL default 0,
    `rating` int unsigned NOT NULL default 0,
    `icon` varchar(120) NOT NULL,
    primary key(`id`)
);

Now, we must put sample application data into the table. Execute the following sql to create sample application data.

INSERT INTO app_data VALUES(null, "Facebook", 20099099, 5, "facebook");
INSERT INTO app_data VALUES(null, "Twitter", 11342099, 5, "twitter");
INSERT INTO app_data VALUES(null, "Google +", 10123023, 4, "google");
INSERT INTO app_data VALUES(null, "Whatsapp", 10033876, 3, "whatsapp");
INSERT INTO app_data VALUES(null, "Youtube", 10023444, 4, "youtube");
INSERT INTO app_data VALUES(null, "Line", 9023434, 5, "line");
INSERT INTO app_data VALUES(null, "Kakao Talk", 8247836, 3, "kakao");
INSERT INTO app_data VALUES(null, "Linked In", 784736, 4, "linkedin");
INSERT INTO app_data VALUES(null, "Angry Bird", 693847, 2, "angrybird");
INSERT INTO app_data VALUES(null, "Skype", 528374, 3, "skype");

 

2. Create PHP Script to Fetch the Data

The database now ready, we need create a PHP script that connect to MySQL server and get the application data. Then the application data is converted into JSON string that will send into client (android application). This script use user root with blank password to login into MySQL server, you can change them to meet your server account.

<?php
$host = "localhost"; // host of MySQL server
$user = "root"; // MySQL user
$pwd = ""; // MySQL user's password
$db = "apps"; // database name

// Create connection
$con = mysqli_connect($host, $user, $pwd, $db);

// Check connection
if(mysqli_connect_errno($con)) {
    die("Failed to connect to MySQL: " . mysqli_connect_error());
} 

// query the application data
$sql = "SELECT * FROM app_data ORDER By id";
$result = mysqli_query($con, $sql);

// an array to save the application data
$rows = array();

// iterate to query result and add every rows into array
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
    $rows[] = $row; 
}

// close the database connection
mysqli_close($con);

// echo the application data in json format
echo json_encode($rows);

Save above source as PHP file and give a name apps.php and you must place it in apache document root, for example http://localhost/test/apps.php.

3. Testing PHP Script in A Browser

We must test the PHP script we’ve created to make sure the script works well. Open your browser and goto http://localhost/test/apps.php (the url may depend on your environtment). If the script works well, you’ll see the following result in your browser.

JSON In Browser
JSON In Browser

Client Side Task (Android Application)

After the server side is ready and tested, now we’ll create an android application that will create a http request to PHP script that we’ve created previously to get all application data and display the data in a list view. In order to display all of data like application title, total downloads, rating and icon, we must create a custom adapter for the list view.
Open your Eclipse IDE and create new android application. Use JsonDemo as the project’s name.
Do the following step by step to create the application.

1. Create Main Layout File

This file is an xml layout file that defines the main user interface. It contains a list view that will display all of the application data.
Save below source code as /res/layout/activity_main.xml.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" >

    <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

 

2. Create Custom List View Layout File

This file is an xml layout file. It responsibles to define a custom view the list view that is contained in the main layout. This file will be used in the custom adapter that will be defined later. The layout contains 3 TextView and 1 ImageView. The image view is used to display the application icon. It is placed on the left. First text view is used to display application’s title. It is placed on the right of the icon. Second text is used to display application’s rating. It is placed on the bottom application’s title. The last text view is used to display the application’ total download.
Save below source code as /res/layout/app_custom_list.xml.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >

    <ImageView android:id="@+id/appIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="3dp" android:layout_marginTop="3dp" android:src="@drawable/facebook" />
    <TextView android:id="@+id/titleTxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/appIcon" android:layout_toRightOf="@id/appIcon" android:layout_marginLeft="3dp" android:text="Application Title" android:textSize="22dp"/>

    <LinearLayout android:id="@+id/ratingCntr" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/appIcon" android:layout_below="@id/titleTxt" android:layout_marginLeft="5dp" >
    </LinearLayout>

    <TextView android:id="@+id/dlTxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/titleTxt" android:layout_alignParentRight="true" android:layout_marginRight="3dp" android:text="0 dl" />    

</RelativeLayout>

 

3. Create Application Value Object File

This file is a java object class that represents an application value object. It has several properties that are mapped from the app_data table from our database. It has properties such as application name, total downloads, rating and icon. Below is definition of the file. Below is the source code that define application value object. Save it as /src/com/sj/jsondemo/Application.java.

package com.sj.jsondemo;

public class Application {
    private String title;
    private long totalDl;
    private int rating;
    private String icon;
    
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public long getTotalDl() {
        return totalDl;
    }
    public void setTotalDl(long totalDl) {
        this.totalDl = totalDl;
    }
    public int getRating() {
        return rating;
    }
    public void setRating(int rating) {
        this.rating = rating;
    }
    public String getIcon() {
        return icon;
    }
    public void setIcon(String icon) {
        this.icon = icon;
    }
}

 

4. Create Custom Adapter File

This file is list view’s custom adapter that will inflate /res/layout/app_custom_list.xml layout file. It’s constructor is defined with 1 parameter. The parameter is an array list of application value object. The adapter will inflates the layout for each application object in the array list and change the application title, rating, total downloads and icons dynamically.
Below is source code that defines the custom adapter. Save it as /src/com/sj/jsondemo/ApplicationAdapter.java.

package com.sj.jsondemo;

import java.text.NumberFormat;
import java.util.List;

import android.content.Context;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class ApplicationAdapter extends ArrayAdapter<Application>{
    private List<Application> items;
    
    public ApplicationAdapter(Context context, List<Application> items) {
        super(context, R.layout.app_custom_list, items);
        this.items = items;
    }
    
    @Override
    public int getCount() {
        return items.size();
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        
        if(v == null) {
            LayoutInflater li = LayoutInflater.from(getContext());
            v = li.inflate(R.layout.app_custom_list, null);            
        }
        
        Application app = items.get(position);
        
        if(app != null) {
            ImageView icon = (ImageView)v.findViewById(R.id.appIcon);
            TextView titleText = (TextView)v.findViewById(R.id.titleTxt);
            LinearLayout ratingCntr = (LinearLayout)v.findViewById(R.id.ratingCntr);
            TextView dlText = (TextView)v.findViewById(R.id.dlTxt);
            
            if(icon != null) {
                Resources res = getContext().getResources();
                String sIcon = "com.sj.jsondemo:drawable/" + app.getIcon();
                icon.setImageDrawable(res.getDrawable(res.getIdentifier(sIcon, null, null)));
            }
            
            if(titleText != null) titleText.setText(app.getTitle());
            
            if(dlText != null) {
                NumberFormat nf = NumberFormat.getNumberInstance();
                dlText.setText(nf.format(app.getTotalDl())+" dl");            
            }
            
            if(ratingCntr != null && ratingCntr.getChildCount() == 0) {        
                /*
                 * max rating: 5
                 */
                for(int i=1; i<=5; i++) {
                    ImageView iv = new ImageView(getContext());
                    
                    if(i <= app.getRating()) {
                        iv.setImageDrawable(getContext().
                        getResources().getDrawable(R.drawable.start_checked));
                    }
                    else {                
                        iv.setImageDrawable(getContext().
                        getResources().getDrawable(R.drawable.start_unchecked));
                    }
                    
                    ratingCntr.addView(iv);
                }
            }
        }
        
        return v;
    }
}

 

5. Create An Async Task File To Get The Data From Server

This file responsibles to get all the application data by creating a http request to PHP script. It is defined by subclassed AsyncTask object class. This means the task will be execute in the background, so it never block the user interface. When the task is executed, a progress bar will be shown to make the interface user friendly. This file communicate to activity via a listener that we’ll create later. This communication is important because we need to notify the activity when all the data has been fetched.
Below is the source code that define the async task. Save it as /src/com/sj/jsondemo/FetchDataTask.java.

package com.sj.jsondemo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
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;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;

public class FetchDataTask extends AsyncTask<String, Void, String>{
    private final FetchDataListener listener;
    private String msg;
    
    public FetchDataTask(FetchDataListener listener) {
        this.listener = listener;
    }
    
    @Override
    protected String doInBackground(String... params) {
        if(params == null) return null;
        
        // get url from params
        String url = params[0];
        
        try {
            // create http connection
            HttpClient client = new DefaultHttpClient();
            HttpGet httpget = new HttpGet(url);
            
            // connect
            HttpResponse response = client.execute(httpget);
            
            // get response
            HttpEntity entity = response.getEntity();
            
            if(entity == null) {
                msg = "No response from server";
                return null;        
            }
         
            // get response content and convert it to json string
            InputStream is = entity.getContent();
            return streamToString(is);
        }
        catch(IOException e){
            msg = "No Network Connection";
        }
        
        return null;
    }
    
    @Override
    protected void onPostExecute(String sJson) {
        if(sJson == null) {
            if(listener != null) listener.onFetchFailure(msg);
            return;
        }        
        
        try {
            // convert json string to json array
            JSONArray aJson = new JSONArray(sJson);
            // create apps list
            List<Application> apps = new ArrayList<Application>();
            
            for(int i=0; i<aJson.length(); i++) {
                JSONObject json = aJson.getJSONObject(i);
                Application app = new Application();
                app.setTitle(json.getString("app_title"));
                app.setTotalDl(Long.parseLong(json.getString("total_dl")));
                app.setRating(Integer.parseInt(json.getString("rating")));  
                app.setIcon(json.getString("icon"));
                
                // add the app to apps list
                apps.add(app);
            }
            
            //notify the activity that fetch data has been complete
            if(listener != null) listener.onFetchComplete(apps);
        } catch (JSONException e) {
            msg = "Invalid response";
            if(listener != null) listener.onFetchFailure(msg);
            return;
        }        
    }
    
    /**
     * This function will convert response stream into json string
     * @param is respons string
     * @return json string
     * @throws IOException
     */
    public String streamToString(final InputStream is) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder(); 
        String line = null;
        
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } 
        catch (IOException e) {
            throw e;
        } 
        finally {           
            try {
                is.close();
            } 
            catch (IOException e) {
                throw e;
            }
        }
        
        return sb.toString();
    }
}

 

6. Create Fetch Data Listener

This file is simple Java interface. It has two method’s declarations, onFetchCompleted and onFetchFailure. onFetchCompleted method will be called from FetchDataTask when data fetching is complete. onFetchFailure will be called from FetchDataTask when data fetching is failure.
Save below source code as /src/com/sj/jsondemo/FetchDataListener.java.

package com.sj.jsondemo;

import java.util.List;

public interface FetchDataListener {
    public void onFetchComplete(List<Application> data);
    public void onFetchFailure(String msg);
}

 

7. Create Activity

This is main activity that will inflate /res/layout/activity_main.xml to create main user interface. When the activity is created, it’s create new FetchDataTask instance and call execute method of the instance. The task runs and start to get all application data in the background. Before execute the task, the activity show progress bar to the user to indicate that the system is loading the data.
This activity also implements FecthDataListener and overriden onFetchCompleted and onFetchFailure. onFetchFailure is used by activity to hide the progress bar and display failure message to user. onFetchCompleted is used by activity to hide the progress bar and display the application data into the list.
The apache server that we used is localhost which same as host that run AVD(Android Virtual Device), so to refers this host from AVD, we must use IP address 10.0.2.2. For more information please visit Android Developer Site.
Save below source code as /src/com/sj/jsondemo/MainActivity.java.

package com.sj.jsondemo;

import java.util.List;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends ListActivity implements FetchDataListener{
    private ProgressDialog dialog;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.activity_main);        
        initView();   
    }

    private void initView() {
        // show progress dialog
        dialog = ProgressDialog.show(this, "", "Loading...");
        
        String url = "http://10.0.2.2/test/apps.php";
        FetchDataTask task = new FetchDataTask(this);
        task.execute(url);
    }
    
    @Override
    public void onFetchComplete(List<Application> data) {
        // dismiss the progress dialog
        if(dialog != null)  dialog.dismiss();
        // create new adapter
        ApplicationAdapter adapter = new ApplicationAdapter(this, data);
        // set the adapter to list
        setListAdapter(adapter);        
    }

    @Override
    public void onFetchFailure(String msg) {
        // dismiss the progress dialog
        if(dialog != null)  dialog.dismiss();
        // show failure message
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();        
    }
}

8. Create Manifest File

The application make a http request, so the the manifest file must contains network usage permission. Below is complete manifest file. Save it as Android.Manifest.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sj.jsondemo" android:versionCode="1" android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
        <activity android:name="com.sj.jsondemo.MainActivity" android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>