Anda di halaman 1dari 5

konfigurasi.

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;

//Objek StringBuilder untuk menyimpan pesan diambil dari server


StringBuilder sb = new StringBuilder();
try {
url = new URL(requestURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setDoInput(true);
conn.setDoOutput(true);

OutputStream os = conn.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);

BufferedWriter bufferedWriter = new BufferedWriter(osw);


String postData = getPostDataString(postDataParams);
bufferedWriter.write(postData);

bufferedWriter.flush();
bufferedWriter.close();
os.close();

int responseCode = conn.getResponseCode();


if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
sb = new StringBuilder();
String response;
//Reading server response
while ((response = br.readLine()) != null){
sb.append(response);
}
}

} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}

private String getPostDataString(HashMap<String, String> params)


throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (Map.Entry<String, String> entry : params.entrySet()) {
if (first)
first = false;
else
result.append("&");

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{

private TextView tvMapel, tvLokasi;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan);

// initialize View Object


Button buttonScan = findViewById(R.id.buttonScan);
Button buttonAbsen = findViewById(R.id.buttonAbsen);
tvMapel = findViewById(R.id.tvMapel);
tvLokasi = findViewById(R.id.tvLokasi);

// 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();
}

// Mendapatkan hasil scan


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null){
if (result.getContents() == null){
Toast.makeText(this, "Hasil tidak ditemukan", Toast.LENGTH_SHORT).show();
}else{
// jika qrcode berisi data
String teksData = result.getContents(); //ambil konten dari QR Code
String[] arrayData = teksData.split("/"); //split data dengan pemisah garis-miring

tvMapel.setText(arrayData[0]);
tvLokasi.setText(arrayData[1]);
}
}else{
super.onActivityResult(requestCode, resultCode, data);
}
}

//Dibawah ini merupakan perintah untuk Mengirim data absensi (CREATE)


private void doAbsensi(){

@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

HashMap<String,String> params = new HashMap<>();

params.put(konfigurasi.KEY_NISN,nisn);
params.put(konfigurasi.KEY_MAPEL,mapel);
params.put(konfigurasi.KEY_RUANG,ruang);

Log.i("parameter1", nisn + "," + mapel + "," + ruang);

RequestHandler rh = new RequestHandler();


String res = rh.sendPostRequest(konfigurasi.URL_ADD, params);

//Log.i("parameter2", konfigurasi.URL_ADD);
return res;
}
}

DoAbsensi doa = new DoAbsensi();


doa.execute();
}

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"

android:text="Submit Absen" />


</LinearLayout>

</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');

//membuat koneksi dengan database


$conn = mysqli_connect(HOST,USER,PASS,DB) or die('Gagal terhubung ke server database');
?>

inputAbsensi.php
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){

//Mendapatkan Nilai Variable


$nisn = $_POST['nisn'];
$mapel = $_POST['mapel'];
$ruang = $_POST['ruang'];

//Pembuatan Syntax SQL


$sql = "INSERT INTO absensi VALUES ('',date(now()), '$nisn', '$mapel', '$ruang')";

//Import File Koneksi database


require_once('koneksi.php');

//Eksekusi Query database


if(mysqli_query($conn,$sql)){
echo 'Berhasil Input Absensi';
}else{
echo 'Gagal Input Absensi';
}

mysqli_close($conn);
}
?>

Anda mungkin juga menyukai