• Tidak ada hasil yang ditemukan

Implementasi Algoritma Apostolico-Crochemore Pada Aplikasi Kumpulan Hadits Shahih Berbasis Android

N/A
N/A
Protected

Academic year: 2017

Membagikan "Implementasi Algoritma Apostolico-Crochemore Pada Aplikasi Kumpulan Hadits Shahih Berbasis Android"

Copied!
14
0
0

Teks penuh

(1)

LISTING PROGRAM

1.

MainActivity.java

package com.skripsi.zahra.haditsshahih;

import android.content.Context; import android.content.Intent; import android.os.Bundle;

import android.support.v4.view.MenuItemCompat; import android.support.v7.app.ActionBar;

import android.support.v7.widget.SearchView; import android.view.KeyEvent;

import android.view.View;

import android.support.design.widget.NavigationView; import android.support.v4.view.GravityCompat;

import android.support.v4.widget.DrawerLayout;

import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar;

import android.view.Menu; import android.view.MenuItem;

import android.view.inputmethod.EditorInfo;

import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView;

import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast;

import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;

(2)

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

private boolean isSearchOpened = false; private EditText edPencarian;

private MenuItem mSearchAction;

// List view

private ListView lv;

// Listview Adapter

ArrayAdapter<String> adapter;

// List untuk dbhadits List<String> dbhadits;

//ALGORITMA APOSTOLICO-CROCHEMORE static int xsize = 256;

static int[] kmpNext = new int[xsize];

//menghitung fungsi pinggiran pada pattern public static void preKmp(String x, int m){ int i,j;

i = 0;

j = kmpNext[0] = -1; while(i < m){

while(j > -1 && x.charAt(i) != x.charAt(j)){ j = kmpNext[j];

} i++; j++;

char xi = 0; char xj = 0; if(i<m)

xi = x.charAt(i); xj = x.charAt(j); if(xi == xj){

(3)

else{

kmpNext[i] = j; }}}

public static int AXAMAC(String x, int m, String y, int n){ //Preprocessing

int ell, i, j, k;

preKmp(x, m); ell = 1; try{

for(ell = 1; x.charAt(ell - 1) == x.charAt(ell); ell++){ }}catch(Exception e){}

if(ell == m){ ell = 0; }

//Searching i = ell; j = k = 0;

while(j <= n - m){

while(i < m && x.charAt(i) == y.charAt(i+j)){ ++i;

}

if(i >= m){

while(k < ell && x.charAt(k) == y.charAt(j + k)){ ++k;

}

if(k >= ell) return j; }

j += (i - kmpNext[i]); if(i == ell){

k = Math.max(0, k-1); }

else{

if(kmpNext[i] <= ell){

(4)

} else{

k = ell;

i = kmpNext[i]; }}}

return -1; }

//AKHIR DARI ALGORITMA APOSTOLICO-CROCHEMORE

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//PENGAMBILAN DATABASES

DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this); databaseAccess.open();

dbhadits = databaseAccess.getData(); databaseAccess.close();

//PENAMBAHAN list dbhadits ke dalam ListView lv lv = (ListView) findViewById(R.id.list_view); adapter = new ArrayAdapter<String>(this,

R.layout.content_main, R.id.label, dbhadits); lv.setAdapter(adapter);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar,

R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState();

(5)

findViewById(R.id.nav_view);

navigationView.setNavigationItemSelectedListener(this); }

protected void handleMenuSearch(){

ActionBar action = getSupportActionBar();

if(isSearchOpened){

action.setDisplayShowCustomEnabled(false); action.setDisplayShowTitleEnabled(true);

InputMethodManager imm = (InputMethodManager)

getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edPencarian.getWindowToken(), 0);

mSearchAction.setIcon(R.drawable.search_black);

isSearchOpened = false; } else {

action.setDisplayShowCustomEnabled(true);

action.setCustomView(R.layout.activity_search);

//untuk menyembunyikan judul

action.setDisplayShowTitleEnabled(false); //text editor

edPencarian =

(EditText)action.getCustomView().findViewById(R.id.idCari); edPencarian.setVisibility(View.VISIBLE);

//saat user klik tombol cari

edPencarian.setOnEditorActionListener(new TextView.OnEditorActionListener() {

@Override

public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

(6)

//MASUK KE PROSES PENCARIAN String pattern =

edPencarian.getText().toString(); ArrayList saveResult = new ArrayList();

//PENYERATAAN HURUF

String ptn = pattern.toLowerCase();

String txt[] = new String[dbhadits.size()]; for(int i=0;i<dbhadits.size();i++){

txt[i] = dbhadits.get(i).toLowerCase(); }

//PENYIMPANAN HASIL PENCARIAN int jumlah_hasil=0;

int result;

for(int i=0;i<dbhadits.size();i++) { result = AXAMAC(ptn, ptn.length(),

txt[i], txt[i].length());

if (result != -1) { jumlah_hasil++;

saveResult.add(dbhadits.get(i)); }}

//MENAMPILKAN HASIL PENCARIAN DARI DATABASE adapter = new ArrayAdapter(getBaseContext(),

R.layout.content_main, R.id.label, saveResult); lv.setAdapter(adapter);

//MENAMPILKAN JUMLAH HADITS YANG BERHASIL DITEMUKAN SISTEM String jml = Integer.toString(jumlah_hasil);

Toast.makeText(getBaseContext(), "Hadits yang ditemukan sebanyak "+jml+" hadits", Toast.LENGTH_LONG).show(); return true;}

return false;} });

edPencarian.requestFocus();

//perintah membuka keyboard

(7)

imm.showSoftInput(edPencarian, InputMethodManager.SHOW_IMPLICIT);

mSearchAction.setIcon(R.drawable.search_color); isSearchOpened = true;

}}

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

mSearchAction = menu.findItem(R.id.action_search); SearchView searchView = (SearchView)

MenuItemCompat.getActionView(menu.findItem(R.id.action_search)); return super.onPrepareOptionsMenu(menu);

}

@Override

public void onBackPressed() {

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else if(isSearchOpened) {

handleMenuSearch(); return;

}else {

super.onBackPressed(); }}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu); return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) { //Menu Toolbar

(8)

case R.id.action_search: handleMenuSearch(); return true;

}

return super.onOptionsItemSelected(item); }

@SuppressWarnings("StatementWithEmptyBody") @Override

public boolean onNavigationItemSelected(MenuItem item) { int id = item.getItemId();

if (id == R.id.nav_help) {

// Menampilkan Petunjuk Penggunaan Intent about = new

Intent(MainActivity.this,HelpActivity.class); startActivity(about);

} else if (id == R.id.nav_about) { // Menampilkan About

Intent about = new

Intent(MainActivity.this,AboutActivity.class); startActivity(about);

} else if (id == R.id.nav_allhadits) { // Menampilkan Semua Hadits

adapter = new ArrayAdapter(getBaseContext(), R.layout.content_main, R.id.label, dbhadits);

lv.setAdapter(adapter);

Toast.makeText(this, "Kembali menampilkan semua hadits", Toast.LENGTH_LONG).show();

}

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

drawer.closeDrawer(GravityCompat.START); return true;

(9)

2.

DatabaseOpenHelper.java

package com.skripsi.zahra.haditsshahih;

/**

* Created by zahra on 12/08/16. */

import android.content.Context;

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

public class DatabaseOpenHelper extends SQLiteAssetHelper { private static final String DATABASE_NAME = "db_hadits"; private static final int DATABASE_VERSION = 1;

public DatabaseOpenHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION); }

}

3.

DatabaseAccess.java

package com.skripsi.zahra.haditsshahih;

/**

* Created by zahra on 12/08/16. */

import android.content.Context; import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList; import java.util.List;

public class DatabaseAccess {

private SQLiteOpenHelper openHelper; private SQLiteDatabase database;

(10)

/**

* Private constructor to aboid object creation from outside classes.

*

* @param context */

private DatabaseAccess(Context context) {

this.openHelper = new DatabaseOpenHelper(context); }

/**

* Return a singleton instance of DatabaseAccess. *

* @param context the Context

* @return the instance of DabaseAccess */

public static DatabaseAccess getInstance(Context context) { if (instance == null) {

instance = new DatabaseAccess(context); }

return instance; }

/**

* Open the database connection. */

public void open() {

this.database = openHelper.getWritableDatabase(); }

/**

* Close the database connection. */

public void close() {

if (database != null) { this.database.close(); }

} /**

(11)

*

* @return a List of tb_HaditsShahih */

public List<String> getData() {

List<String> list = new ArrayList<>();

Cursor cursor = database.rawQuery("SELECT * FROM tb_HaditsShahih", null);

cursor.moveToFirst();

while (!cursor.isAfterLast()) { list.add(cursor.getString(0)); cursor.moveToNext();

}

cursor.close(); return list; }

}

4.

HelpActivity.java

package com.skripsi.zahra.haditsshahih;

/**

* Created by zahra on 26/08/16. */

import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;

public class HelpActivity extends Activity{

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_help); //menerima Intent yang dikirim

Intent i = this.getIntent(); }

(12)

5.

AboutActivity.java

package com.skripsi.zahra.haditsshahih; /**

* Created by zahra on 09/08/16. */

import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;

public class AboutActivity extends Activity{

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_about);

//menerima Intent yang dikirim Intent i = this.getIntent(); }

(13)

CURRICULUM VITAE

---

Data Pribadi

Nama

: Dewi Zahra

Tempat/Tanggal Lahir

: Medan / 4 Desember 1994

Tinggi/Berat Badan

: 165 cm / 60 kg

Agama

: Islam

Kewarganegaraan

: Indonesia

Alamat Sekarang

: Jl. Brigjen Z. Hamid Titi Kuning Gg. Keluarga No.3,

Medan

Alamat Orang Tua

: Jl. Brigjen Z. Hamid Titi Kuning Gg. Keluarga No.3,

Medan

Telp/ Hp

: 08982838002

Email

: [email protected]

---

Riwayat Pendidikan

[2009

2012] : SMAN 13 Medan

[2006

2009] : SMP Swasta Harapan Mandiri Medan

[2000

2006] : SDN 067775 Medan

[1999

2000] : TK Dewantara Medan

---

Keahlian

Keahlian Komputer :

Pemrograman : C++, C, Java

Database : MySQL, SQlite

(14)

---

Pengalaman Organisasi

[2004

2005] Pramuka SDN 067775 Medan

[2007

2008] Anggota Shiroite Karatedo

[2009] Anggota Basket SMAN 13 Medan

[2009] Anggota Dokter Remaja SMAN 13 Medan

[2013

2014] Anggota Kewirausahaan UKMI Al-Khuwarizmi

[2014

2015] Anggota Keputrian UKMI Al-Khuwarizmi

[2014

2015] Anggota Kaderisasi DPW KAM-Rabbani FASILKOM-TI

---

Pengalaman Kepanitiaan

[2014] Anggota Konsumsi TRICK 9 UKMI Al-Khuwarizmi

[2014] Anggota Konsumsi Meet and Greet DPW KAM-Rabbani FASILKOM-TI

[2014] Anggota Kesehatan PORSENI IMILKOM

[2014] Anggota Keamanan PMB Fakultas Fasilkom-TI

---

Seminar

[2014] Seminar Nasional Literasi Informasi “SENARAI”

Kompetisi

[2014] Lomba Programming ARTECHNO

Referensi

Dokumen terkait

Oleh karena rasanya yang pahit, hanya sebagian orang saja yang mengkonsumsi daunnya, sebagian besar yang lain memilih untuk tidak mengkonsumsinya. Padahal kita

In the list, content knowledge refers to the knowledge of teaching materials which is also what learners are taught; general pedagogical knowledge is related to

Pada penelitian ini di lakukan perancangan dan implementasi keamanan data document (.doc) dengan menggunakan metode enkripsi twofish yang berfungsi untuk mengenkripsi data

speaking ability was better improved. The improvement was made by them in all indicators. The highest improvement made by the students was found in term of fluency and the

Berdasarkan penelitian, pembahasan, pengujian, dan analisis terhadap sistem, maka dapat diambil kesimpulan sebagai berikut : (1) sistem keamanan data dokumen (

Tujuan penelitian ini dilakukan adalah untuk menentukan kadar air dan besar bilangan penyabunan dalam minyak kelapa serta menentukan apakah kadar air dan bilangan penyabunan

Sistem penilaian dengan system KPI, selain dapat mengukur kinerja orang per orang, juga bisa dilakukan untuk melakukan pengukuran kinerja secara kelompok, baik itu

Dengan menggunakan Akibat 2.3 ini, dapat dikonstruksi sebuah aljabar graf pada graf- berhingga baris tanpa sources seperti halnya pada graf berarah, dinotasikan dengan