java
class konfigurasi {
//Dibawah ini merupakan Pengalamatan dimana Lokasi Skrip CRUD PHP disimpan
//PENTING! JANGAN LUPA GANTI IP SESUAI DENGAN IP KOMPUTER DIMANA DATA PHP BERADA
static final String URL_ADD="http://192.168.1.6/absensi/inputAbsensi.php";
//Berikut ini Kunci yang digunakan untuk mengirim permintaan ke Skrip PHP, sesuaikan kebutuhan
static final String KEY_NISN = "nisn";
static final String KEY_MAPEL = "mapel";
static final String KEY_RUANG = "ruang";
RequestHandler.java
public class RequestHandler {
//Metode Untuk mengirim httpPostRequest
//Metode ini mengambil 2 Argumen
//Pertama adalah URL dari Skrip yang digunakan untuk mengirimkan permintaan
//Kedua adalah HashMap dengan nilai pasangan nama berisi data yang akan dikirim dengan permintaan
String sendPostRequest(String requestURL,
HashMap<String, String> postDataParams) {
//Membuat URL
URL url;
OutputStream os = conn.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
bufferedWriter.flush();
bufferedWriter.close();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return result.toString();
}
}
ScanActivity
Sesuaikan kebutuhan
public class ScanActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan);
// attaching onclickListener
buttonScan.setOnClickListener(this);
buttonAbsen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
doAbsensi(); //panggil perintah absensi
}
});
@Override
public void onClick(View v) {
// inisialisasi IntentIntegrator(scanQR) qr code scanner object
IntentIntegrator intentIntegrator = new IntentIntegrator(this);
intentIntegrator.initiateScan();
}
tvMapel.setText(arrayData[0]);
tvLokasi.setText(arrayData[1]);
}
}else{
super.onActivityResult(requestCode, resultCode, data);
}
}
@SuppressLint("StaticFieldLeak")
class DoAbsensi extends AsyncTask<Void,Void,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Toast.makeText(ScanActivity.this,s,Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(Void... v) {
String nisn = "E221100"; //nilai ini bisa didapat dari login user
String mapel = tvMapel.getText().toString(); //ini dari tampilan textView
String ruang = tvLokasi.getText().toString(); //ini juga dari tampilan textView
params.put(konfigurasi.KEY_NISN,nisn);
params.put(konfigurasi.KEY_MAPEL,mapel);
params.put(konfigurasi.KEY_RUANG,ruang);
//Log.i("parameter2", konfigurasi.URL_ADD);
return res;
}
}
Format QR Code
Format data pada QR dibuat lebih sederhana, supaya tidak perlu menggunakan JSON.
activity_scan.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
tools:context=".ScanActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mata Pelajaran" />
<TextView
android:id="@+id/tvMapel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="nama matapelajaran"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ruang" />
<TextView
android:id="@+id/tvLokasi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="lokasi kelas"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<Button
android:id="@+id/buttonScan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Scan QR Code" />
<Button
android:id="@+id/buttonAbsen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
</RelativeLayout>
Server
Lokasi API di c:\xampp\htdocs\absensi. Sesuaikan kebutuhan.
koneksi.php
<?php
//Mendefinisikan Konstanta
define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DB','absensi');
inputAbsensi.php
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
mysqli_close($conn);
}
?>