Salam Developer, kali ini kita akan melanjutkan postingan sebelumnya mengenai koneksi Android dengan PHP MySQL. Untuk lebih jelasnya akan kita implementasikan pada program yang dibuat dibawah ini. Jika ingin membuka postingan sebelumnya klik link berikut
Untuk persiapan, tool tool yang kita butuhkan adalah
1. Apache Web Server dan mySQL bisa pake XAMPP download disini –> XAMPP
2. Eclipse dan Android SDK –> versi yang saya gunakan disini ada 2.3.3 Ginggerbeard
3. Notepad++ atau Dreamweaver terserah mau pake yang mana untuk edit file PHP
4. Kopi/Susu + roti bakar --> Wajib nih meski cuman singkat tutorialnya
Bagian 1 Buat Project baru pada Android
Seperti sebelumnya copykan file class JSONParser yang ada di postingan sebelumnya ke project ini. Setelah itu buat class baru bernama UserFunction.java. Nantinya class ini akan menghandle fungsi fungsi JSON dan HTTP-POST yang akan kita lakukan.(ingat class dan package yang saya gunakan dalam project ini adalah default dari komputer saya. jadi ketika anda melakukan copas cek sesuai dengan konfigurasi milik anda)
UserFunction.java
package com.eepis.android; import java.util.ArrayList; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONObject; public class UserFunctions { private JSONParser jsonParser; private static String loginURL = "http://10.0.2.2/tes/"; private static String login_tag = "login"; private static String register_tag = "register"; // constructor public UserFunctions(){ jsonParser = new JSONParser(); } public JSONObject loginUser(String email, String password){ // Building Parameters List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("tag", login_tag)); params.add(new BasicNameValuePair("email", email)); params.add(new BasicNameValuePair("password", password)); JSONObject json = jsonParser.getJSONFromUrl(loginURL, params); return json; } /** * function make Login Request * @param name * @param email * @param password * */ public JSONObject registerUser(String name, String email, String password){ // Building Parameters List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("tag", register_tag)); params.add(new BasicNameValuePair("name", name)); params.add(new BasicNameValuePair("email", email)); params.add(new BasicNameValuePair("password", password)); // getting JSON Object JSONObject json = jsonParser.getJSONFromUrl(loginURL, params); // return json return json; } } |
LoginFormActivity.java
package com.eepis.android; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; public class LoginFormActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ //Deklarasi variabel view object TextView error; Button login,register; EditText user,pwd; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //Registrasi view id error=(TextView)findViewById(R.id.txt1); login=(Button)findViewById(R.id.btn1); login.setOnClickListener(this); register=(Button)findViewById(R.id.btn2); register.setOnClickListener(this); user=(EditText)findViewById(R.id.edit1); pwd=(EditText)findViewById(R.id.edit2); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btn1: //Memanggil fungsi login di class userfunction UserFunctions userFunction = new UserFunctions(); JSONObject json = userFunction.loginUser(user.getText().toString(), pwd.getText().toString()); try { if (json.getString("success") != null) { error.setText(""); String res = json.getString("success"); if(Integer.parseInt(res) == 1){ Intent login = new Intent(LoginFormActivity.this,MemberActivity.class); startActivity(login); MemberActivity.session=user.getText().toString(); }else{ error.setText("username/password anda salah"); } } } catch (JSONException e) { e.printStackTrace(); } break; case R.id.btn2: //Memanggil fungsi register di class userfunction AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle("Registrasi"); alert.setMessage("Masukkan Data Anda"); // Set an EditText view to get user input LinearLayout lay=new LinearLayout(this); lay.setOrientation(LinearLayout.VERTICAL); final EditText name = new EditText(this); name.setHint("Nama"); final EditText email = new EditText(this); email.setHint("Email"); final EditText password = new EditText(this); password.setHint("Password"); lay.addView(name); lay.addView(email); lay.addView(password); alert.setView(lay); alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String nama = name.getText().toString(); String mail = email.getText().toString(); String pass = password.getText().toString(); UserFunctions userFunction = new UserFunctions(); JSONObject json = userFunction.registerUser(nama, mail, pass); try { if (json.getString("success") != null) { String res = json.getString("success"); if(Integer.parseInt(res) == 1){ Toast.makeText(LoginFormActivity.this, "Registrasi Berhasll", 1).show(); }else{ Toast.makeText(LoginFormActivity.this, "Registrasi Gagal", 1).show(); } } } catch (JSONException e) { e.printStackTrace(); } } }); alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }); alert.show(); break; default: break; } } } |
MemberActivity.java
package com.eepis.android; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MemberActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ Button logout; static String session=""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.member); logout=(Button)findViewById(R.id.btn1); logout.setOnClickListener(this); } @Override public void onClick(View arg0) { // TODO Auto-generated method stub this.session=""; this.finish(); } } |
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.eepis.android" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".LoginFormActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="@string/app_name" android:name=".MemberActivity" > </activity> </application> <uses-permission android:name="android.permission.INTERNET" /> </manifest> |
Bagian 2 Buat API yang menghandle request dari Android
Pada server side kita membuat API yang menangkap Http-Post yang kita kirim via android dan mengembalikannya ke kita dalam bentuk JSON
SQL file
<form action="index.php" method="post"> <p>tag: <input type="text" name="tag" /></p> <p>name: <input type="text" name="name" /></p> <p>email: <input type="text" name="email" /></p> <p>password: <input type="text" name="password" /></p> <input type="submit" name="submit" value="Submit" /> </form> |
index.php
<?php /** File ini untuk menghandle API Request hasilnya di encoda dalam bentuk JSON /** * check for POST request */ if (isset($_POST['tag']) && $_POST['tag'] != '') { // Tag $tag = $_POST['tag']; // Database Handler require_once 'include/DB_Functions.php'; $db = new DB_Functions(); // Response--> data yang akan dikembalikan $response = array("tag" => $tag, "success" => 0); // Cek tipe tag if ($tag == 'login') { // Tangkap data yang dikirim dari android $email = $_POST['email']; $password = $_POST['password']; // Cek user $user = $db->getUserByEmailAndPassword($email, $password); if ($user != false) { // User ditemukan $response["success"] = 1; echo json_encode($response); } else { // User tidak ditemukan $response["success"] = 0; echo json_encode($response); } } else if ($tag == 'register') { // Tangkap data yang dikirim dari android $name = $_POST['name']; $email = $_POST['email']; $password = $_POST['password']; // cek user sudah ada atau belum if ($db->isUserExisted($email)) { // User sudah ada $response["success"] = 0; $response["error_msg"] = "User sudah ada"; echo json_encode($response); } else { // Simpan user baru $user = $db->storeUser($name, $email, $password); if ($user) { // Registrasi Berhasil $response["success"] = 1; echo json_encode($response); } else { // Registrasi Gagal $response["success"] = 1; echo json_encode($response); } } } else { echo "Invalid Request"; } } else { echo "Access Denied"; } ?> |
config.php
<?php /** * Database config variables */ define("DB_HOST", "localhost"); define("DB_USER", "root"); define("DB_PASSWORD", ""); define("DB_DATABASE", "tes"); ?> |
DB_Connect.php
<?php class DB_Connect { // constructor function __construct() { } // destructor function __destruct() { // $this->close(); } // Connecting to database public function connect() { require_once 'include/config.php'; // connecting to mysql $con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); // selecting database mysql_select_db(DB_DATABASE); // return database handler return $con; } // Closing database connection public function close() { mysql_close(); } } ?> |
DB_Function.php
<?php class DB_Functions { private $db; // constructor function __construct() { require_once 'DB_Connect.php'; // Koneksi ke database $this->db = new DB_Connect(); $this->db->connect(); } // destructor function __destruct() { } public function storeUser($name, $email, $password) { $uuid = uniqid('', true); $hash = $this->hashSSHA($password); $encrypted_password = $hash["encrypted"]; // Enkripsi password $salt = $hash["salt"]; // salt $result = mysql_query("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())"); // Cek registrasi berhasil if ($result) { return true; } else { return false; } } /** * Cek user di database */ public function getUserByEmailAndPassword($email, $password) { $result = mysql_query("SELECT * FROM users WHERE email = '$email'") or die(mysql_error()); $no_of_rows = mysql_num_rows($result); if ($no_of_rows > 0) { $result = mysql_fetch_array($result); $salt = $result['salt']; $encrypted_password = $result['encrypted_password']; $hash = $this->checkhashSSHA($salt, $password); // Cek kesamaan password if ($encrypted_password == $hash) { // Identifikasi berhasil return true; } } else { // User tidak ditemukan return false; } } /** * Cek user exist atau tidak */ public function isUserExisted($email) { $result = mysql_query("SELECT * from users WHERE email = '$email'"); $no_of_rows = mysql_num_rows($result); if ($no_of_rows > 0) { // user existed return true; } else { // user not existed return false; } } /** Enkripsi password */ public function hashSSHA($password) { $salt = sha1(rand()); $salt = substr($salt, 0, 10); $encrypted = base64_encode(sha1($password . $salt, true) . $salt); $hash = array("salt" => $salt, "encrypted" => $encrypted); return $hash; } public function checkhashSSHA($salt, $password) { $hash = base64_encode(sha1($password . $salt, true) . $salt); return $hash; } } ?> |
Bagian 3 Hasil running aplikasi
File JSON yang dikirim ke android berbentuk
// Jika berhasil {"tag":"login","success":1} // Jika gagal {"tag":"login","success":0} // Jika user exist {"tag":"register","success":0,"error_msg":"User sudah ada"} |
Hasil tampilan pada aplikasi
Demikianlah tutorial kali ini semoga bisa bermanfaat buat kawan kawan sekalian. Untuk source projectnya bisa di download di alamat berikut
DOWNLOAD
Tutorial selanjutnya akan membahas tentang menghandle data array dalam format JSON dengan Android. So Keep Update ya
jika ada pertanyaan silahkan saja email saya di bagibagi23@gmail.com
Thanks atas tutorialnya n sangat membantu.....
BalasHapusgan kalo pendaftaran menggunakan multiselect gmn tuh????
BalasHapusbisa ga gan,,,???
plese,,, Happy bloging.. :D
gan, ini cara akses file2 yg dibagian ke 2 bagaimana? mhn penjelasanny gan, maturnuwun..
BalasHapusgan cara, membuat session di android gmn? biar ketahuan yang login itu user siapa
BalasHapusgan, gmana caranya supaya nama si usernya juga muncul di halaman welcomenya, bisa bantu gk?
BalasHapuskalo bisa kirimin packagenya ke email ini sofwanhabibi93@yahoo.com
maaf gan,, ini file UserFunction.java erorr banyak banget,, mohon pencerahanya
BalasHapusterimakasih tutorialnya :)
BalasHapusgan bisa buat api menggunakan jsp gak bukan php, terimakasih.
BalasHapusgan mau tanya dong kok pas mau register ga bisa ya force close gitu.. itu kenapa ya??
BalasHapusgan, yang diletakkan di htdocs nya folder yg mana ya? folder server side atau folder include,, terus kalu folder include,, file index.php dan send php nya diletakkan dimana gan? trims
BalasHapusane ada tutorial cara login dan register di eclipse, tapi beda versi ada video + source codenya ,,, silahkan cek gan ,,,
BalasHapushttp://www.materi-it.com/2015/03/cara-login-dan-register-android-eclipse.html
Mantap Gan lanjutkan siiip :)
BalasHapusHalo kak, terimakasih artikelnya... ini sangat membantu saya dalam menyelesaikan tugas kuliah saya. oh ya kak, perkenalkan nama saya Nurhamimah dan jangan lupa kunjungi website kampus saya ISB Atma Luhur
BalasHapusKomentar ini telah dihapus oleh pengarang.
BalasHapus