Membuat Kamus Digital

Kamus digital adalah kamus yang bisa di muat dalam HP, agar mudah di akses, dan mudah di baca kapanpun dan dimanapun. Tentunya HP-nya android dong.
Kamus digital yang akan saya bangun ini adalah spesial, karena untuk menjalankan-nya ia tidak membutuhkan koneksi network atau koneksi internet.
Kamus Digital ini juga akan meniru pencarian di google, dimana ia akan dengan cepat menebak kira2 kata apa yang kita mau cari, ia akan  menyuguhkan ke layar HP  berbagai pilihan kata dari yang hampir benar sampai yang paling benar. Dan ketika di klik pada kata yang di butuhkan maka aplikasi akan membukanya dan memperlihatkan isinya(arti kata). Perhatikan gambar2 berikut


Gambar berikut menunjukan kecerdasan mencari dari aplikasi ini, ketika ketik huruf  'a' maka aplikasinya dengan cepat mencari database untuk semua yang di awali huruf  'a'. Ia mencoba menebak apa yang mau di cari oleh pengguna sehingga mudah untuk mendapatkan kata apa yang mau di cari.


Setelah pengguna menemukan kata yang ingin di cari maka aplikasi ini mempersembahkan soft keyboard yang siap di pergunakan untuk pencarian kata(data) selanjutnya.

Langkah membangun aplikasi Kamus Digital ini akan mengikuti nalar dan logika cara berpikir dari kebanyakan orang (orang biasa) seperti saya dan anda. Oleh karena itu, logikanya bahwa kalau mau menyimpan kamus di dalam HP tentunya kita harus membuat HP-nya agar bisa melakukan hal2 dengan kriteria sbb:

1. Bisa mebuka kamus
2. Ada penghubung antara aplikasi dan data.
3. Ada tempat untuk bisa menampung data
4. Ada tempat untuk menampilkan kata2

Kalau kita terjemahkan ke 4 logika di atas masing2 kedalam class program java maka pembuka kamus adalah identik dengan class 'main' yang sebagian besar aktivitasnya adalah hanya untuk memulai dan membuka aplikasi 'Kamus Digital' ini. Secara sederhana class main dalam bahasa program java(android) adalah mirip dengan home page pada halaman web, yaitu kerja utamanya adalah sebagai pintu masuk kedalam web atau aplikasi. Tentunya halaman depan atau home page dapat bekerja lebih banyak daripada sekedar pintu masuk, demikian juga halnya dengan class main pada aplikasi yang di bangun pakai bahasa program java, seperti aplikasi android yang sedang kita bicarakan di sini.

1.a Bisa membuka kamus

Sebagai class main atau sebagai pintu masuk dan atau sebagai halaman awal dari aplikasi' Kamus Digital' ini, maka saya akan membuatkan class yang saya beri nama KamusDigital.java silahkan membuat nama class sesuai logika masing2
Berikiut adalah isi dari class KamusDigital.java
/*
 * Copyright (C)Vik Sintus Projects
 *
 * Segala kelebihan dan kekurangan di luar tanggung jawab pembuat.
 * Di larang memakai kode ini untuk kepentingan komersial tanpa ijin.
 * Silahkan di pakai untuk kepentingan belajar.
 * vik.sintus@gmail.com
 *
 * Unless required by applicable law or agreed to in writing, this software
 * is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * 
 * 
 */

package com.vik_sintus.projects.kamusDigital;

import android.app.Activity;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

/**
 * beraksi sebagai halaman depan (main).
 * yang menayangkan hasil pencarian dari 'search dialog' dan
 * menghandle aksi apa yg di lakukan dengan hasil.
 */
public class KamusDigital extends Activity {

    private TextView munculTulisan;
    private ListView barisanKata;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tampilan);

        munculTulisan = (TextView) findViewById(R.id.tulisanMuncul);
        barisanKata = (ListView) findViewById(R.id.barisDemiBaris);

        handleIntent(getIntent());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        // oleh karena aktivitas-nya di set dengan launchMode="singleTop", itu berarti 
        // halaman(aktivitas) dapat di daur ulang dalam arti kalau halaman telah 
     // di buka sebelumnya maka tak perlu di buka lagi tapi hanya menghidupkan 
     // intent pada halaman tsb sehingga mengangkatnya ke depan (terlihat lagi)
        
     
        
        handleIntent(intent);
    }

    private void handleIntent(Intent intent) {
        if (Intent.ACTION_VIEW.equals(intent.getAction())) {
            // mengatur klik utk search suggestion dan menghidupkan
         // activity yg membuat kata2 bisa di klik
            Intent agarKataDptDiKlik = new Intent(this, TampilanKata.class);
            agarKataDptDiKlik.setData(intent.getData());
            startActivity(agarKataDptDiKlik);
            finish();
        } else if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            // mengatur query pencarian
            String query = intent.getStringExtra(SearchManager.QUERY);
            showResults(query);
        }
    }

    /**
     * cari di kamus dan tunjukan hasil dari query tertentu
     * @parameter query-nya adalah search query
     */
    private void showResults(String query) {

        Cursor cursor = managedQuery(PenghubungData.CONTENT_URI, null, null,
                                new String[] {query}, null);

        if (cursor == null) {
            // kalau tak ada hasil di ketemukan
            munculTulisan.setText(getString(R.string.tak_ada_hasil, new Object[] {query}));
        } else {
            // tunjukan beberapa hasil
            int count = cursor.getCount();
            String countString = getResources().getQuantityString(R.plurals.hasil_pencarian,
                                    count, new Object[] {count, query});
            munculTulisan.setText(countString);

            // KATA di taruh di kolom 'kolomKata' 
            // ARTI_NYA di taruh di 'kolomArtinya'
            String[] dari = new String[] { KamusDatabase.KATA,
                                           KamusDatabase.ARTI_NYA };

            // buatkan hubungan antara design element, dimana kolom akan muncul 
            int[] ke = new int[] { R.id.kolomKata,
                                   R.id.kolomArtinya };

            // buatkan cursor adapter sederhana utk semua kata dan 
            // artinya dan tayangkan baris demi baris(ListView) pada layar
            SimpleCursorAdapter letakanKataPadaTempatnya = new SimpleCursorAdapter(this,
                                          R.layout.hasil, cursor, dari, ke);
            barisanKata.setAdapter(letakanKataPadaTempatnya);

            // apa yg terjadi saat klik pada kata2 yang telah berjajar baris demi baris di layar 
            barisanKata.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    // ketika sebauh kata dapat di klik
                    Intent kataDiKlik = new Intent(getApplicationContext(), TampilanKata.class);
                    Uri data = Uri.withAppendedPath(PenghubungData.CONTENT_URI,
                                                    String.valueOf(id));
                    kataDiKlik.setData(data);
                    startActivity(kataDiKlik);
                }
            });
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater perpanjangTampilan = getMenuInflater();
        perpanjangTampilan.inflate(R.menu.untuk_menu, menu);

        SearchManager mengaturSearch = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView tampilanSearch = (SearchView) menu.findItem(R.id.cari).getActionView();
        tampilanSearch.setSearchableInfo(mengaturSearch.getSearchableInfo(getComponentName()));
        tampilanSearch.setIconifiedByDefault(false);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.cari:
                onSearchRequested();
                return true;
            default:
                return false;
        }
    }
}
Untuk sekarang saya kehabisan waktu, nanti akan saya buatkan ke 3 class lain-nya, sehingga kalau semuanya sudah termuat disini maka siapapun bisa copy dan paste untuk di pakai di aplikasi masing2. Apalagi bagi mereka yang bisa bahasa asing, aplikasi macam ini bisa di adaptasikan, dapat di jual di pasar bebas seperti 'google play' dll. Calon developer Kamus Digital ini hanya akan mengisi data terjemahan dari bahasa asing yang dia tahu, misalnya Indonesia-Jerman, Prancis-Indonesia, Manggarai-Bajawa dll.

2.a Ada Penghubung Antara Aplikasi dan Data

Silah melihat class penghubung antara aplikasi dan data di sini

31 comments:

  1. Mohon penjelasan untuk peringatan berikut ini:

    http://imageshack.us/a/img525/370/pic2aq.png

    ReplyDelete
  2. itu karena semua UI(user interface)nya belum ada
    silahkan ambil semua UI dalam bentuk xml dari http://belajar-android-indonesia.blogspot.com.au/2012/10/user-interface-untuk-kamus-digital.html

    ReplyDelete
    Replies
    1. mas mohon penjelasan saya di class KamusDigital.java
      ada error di import android.widget.SearchView;

      http://imageshack.us/photo/my-images/812/73321140.jpg/

      Delete
    2. ok Ful Error itu membutuhkan android 3.0 API level 11, karena saya sangat membutuhkan class SearchView dan class ActionBar bawaan android honeycomb untuk di gunakan dalam aplikasi kamus ini penjelasan selngkapnya sudah di inbox gmail.
      sedangkan kamusnya telah saya pasang di market https://play.google.com/store/apps/details?id=com.vik_sintus.projects.kamusDigital&feature=more_from_developer#?t=W251bGwsMSwxLDEwMiwiY29tLnZpa19zaW50dXMucHJvamVjdHMua2FtdXNEaWdpdGFsIl0.

      Delete
  3. mas ini source code bolelh dipakai?

    ReplyDelete
    Replies
    1. silahkan di pakai mas, semoga per-android-an Indonesia akan tambah maju

      Delete
  4. Mas, saya masih newbie android,saya mau membuat kamus android, dengan database, dan juga bisa input kata baru dalam kamus tersebut...apakah ad tutorial lengkapnya ?thx

    ReplyDelete
    Replies
    1. sorry terlambaaaaaaat balas
      aplikasi kamus digital yang saya bicarakan disini adalah hanya bisa menambahkan kata oleh developer alias dari back end-nya. Alasan-nya agar tidak membebankan resource HP.

      Saya hanya menggunakan .txt file sebaga databasenya

      Delete
  5. itu kata yang di inputkan bisa mengandung awalan dan/atau akhiran gk?.

    ReplyDelete
    Replies
    1. bisa... tapi tak bisa utk kata berisi dua-kata seperti 'rambut merah'
      NOTE bukan-nya tak bisa tapi semua sistim abjad(alphabetical order) belum ada yang sempurna. Kata 'rambut merah' ketika di search akan keluar kata2 yang berawalan 'm' bukan 'r' seperti yang di harapkan. Tentunya kata 'rambut merah' akan keluar juga dengan sendirinya kalau kita ketik-an katanya secara penuh. Soalnya di development aplikasi ini saya ingin agar proses pencarian katanya ramping dan cepat persis seperti kita cari di google online
      NOTE. aplikasi ini adalah offline alias tak butuh internet untuk menggunakan-nya

      Delete
  6. permisi gan...terima kasih ilmu yg diposting...saya mau tanya agan pake metode binnary search dan approximate string matching yaa?? trus DB nya pake .txt yaa??

    mohon balasannya gan....

    ReplyDelete
    Replies
    1. betul sekali mas, coba telusuri... kodenya sudah lengkap(dalam arti, bisa di install di hp), silahkan di kembangkan

      Delete
    2. kalau untuk 5 bahasa kira" logikanya seperti apa mas?

      Delete
  7. mas vik,, saya mau tanya,,,, sebenarnya keluaran suara itu sumber suaranya dari mana ya mas,, kok bisa pas banget klo yang dibaca text english..

    ReplyDelete
    Replies
    1. sejak android 1.6 ke atas sudah ada engine suara.. kalau develop menggunakan suara silahkan implementasikan class bernama TextToSpeech .... lihat implementasinya di
      http://belajar-android-indonesia.blogspot.com.au/2011/11/aplikasi-yang-membuat-hp-bisa-ngomong.html
      Disana saya deklarasikan TextToSpeech-nya sebagai hpMembaca

      Delete
    2. maz punyaku softkeyboardnya gak muncul gimana tu mas,,
      lo bleh share filerarnya dunk maz
      ahmadbuhari111@gmail.com

      Delete
  8. Your contents are too simple to read and easy to understand.

    --------------------------------------------------------------------------------------------------------------
    iPhone App Development & iOS App Development & Android Application Development

    ReplyDelete
  9. mas itu pake software apa aja ya saya masih awam bngt,mohon balasanya

    ReplyDelete
  10. mas gimana carax membuat menu search engine untuk mencari kata dalam kalimat yang banyak. dan setelah di didapt misal cari kata " pemilu" maka muncul semua dalam bentuk list view.

    ReplyDelete
  11. mas Vik Sintus, saya super-super newbie nih tapi punya keinginan tuk membuat aplikasi kayak gini "kamus kata-kata"

    Kasi tau donk, aplikasi apa yang didownload tuk menuliskan kode-kode diatas.
    terimakasih.

    ReplyDelete
  12. mas, masih ada satu class java lagi nih yg eror. dan semuanya yg berhubungan dgn R.java.. gimana yah?
    mohon bimbingannya ya mas? :)

    ReplyDelete
    Replies
    1. R. Java di generate secara otomatis,
      coba di clean, atau di refresh dan kalau perlu di restart

      Delete
  13. permisi bro..
    file txt untuk database katanya itu yang mana ??

    ReplyDelete
    Replies
    1. segala file yang berekstensi .txt
      model datanya seperti pada bagian bawah di halaman berikut http://belajar-android-indonesia.blogspot.com.au/2012/10/user-interface-untuk-kamus-digital.html
      yaitu kata di sebelah kiri dan artinya di sebelah kanan yang di pisahkan oleh tanda kurang
      contoh: guru - teacher

      Delete
    2. ow, iya bro...
      z sdh coba coba semua ini mas, kok untuk R nya dia eror mas..?
      saya sdh clean atau refresh tp tetap nda bisa mas..
      Mohon pencerahannnya mass

      Delete
  14. Bos... Kalau pesan source codenya apa bisa... Saya ingin membuat kamus bahasa jawa... Thanks ya...

    ReplyDelete
  15. misi gan kalau aku gunakan codenya untuk tugas kuliah bolehkan gan?

    ReplyDelete
  16. mas kalo pake database sqlite terus di koneksikan metodenya binary bisa gak ? kalo gak bisa ada gak info / link website yang bisa saya pelajari

    ReplyDelete
  17. assalamualaiikum kak vik saya berterima kasih dengan ilmu yang kakak share dan sudah saya coba kak.. tetapi koq tdk bisa dijalankan. Apakah saya boleh minta programnya?? karena ini untuk skripsi saya kak.. saya minta tolong yah kak kirim ke email aadistyana@yahoo.com atau ke andiadisty@gmail.com
    Tolong yah kak bantuannya...

    ReplyDelete
  18. mau juga donk programnya k email citrapuji2@gmail.com

    ReplyDelete