- Beranda
- Komunitas
- Tech
- Programmer Forum
selalu force close saat tombolnya di klik
TS
tomattumis
selalu force close saat tombolnya di klik
gan ada yang tau nggak knapa saat ane klik tombolnya selalu saja force close, apanya yang salah?
MainActivity.java
KamusDatabase.java
mohon pencerahannya yah agan-agan sekalian
MainActivity.java
Code:
package net.agusharyanto.kamus;
//import com.project.kamus.andro.PenghubungData;
import android.app.Activity;
//import android.app.SearchManager;
//import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
//import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
//import android.widget.AdapterView;
import android.widget.EditText;
//import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
//import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
// private SQLiteDatabase db = null;
// private Cursor kamusCursor = null;
private EditText txtInggris;
private EditText txtIndonesia;
private EditText txtJerman;
Button TombolCek;
private KamusDatabase db_kamus_Helper;
public void getTerjemahan()
{
this.db_kamus_Helper.openDataBase();
Cursor localCursor = this.db_kamus_Helper.getKata(this.txtInggris.getText().toString());
if (localCursor.moveToFirst())
setTerjemahan(localCursor);
while (true)
{
Toast.makeText(this, "kata tidak ditemukan", Toast.LENGTH_SHORT).show();
this.db_kamus_Helper.close();
return;
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//datakamus = new KamusDatabase(this);
//db = datakamus.getWritableDatabase();
setContentView(R.layout.activity_main);
txtInggris = (EditText) findViewById(R.id.txtInggris);
txtIndonesia = (EditText) findViewById(R.id.txtIndonesia);
txtJerman = (EditText) findViewById(R.id.txtJerman);
TombolCek = (Button) findViewById(R.id.btnTerjemah);
TombolCek.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
{
getTerjemahan();
}
}
});
}
public void setTerjemahan(Cursor paramCursor)
{
Toast.makeText(this, "konversi : " + paramCursor.getString(0) + "\n" + "SUGGEST_COLUMN_TEXT_1 : " + paramCursor.getString(1) + "\n" + "SUGGEST_COLUMN_TEXT_2 : " + paramCursor.getString(2), Toast.LENGTH_SHORT).show();
}
}
KamusDatabase.java
Code:
package net.agusharyanto.kamus;
import android.app.SearchManager;
import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.database.SQLException;
import android.provider.BaseColumns;
import android.text.TextUtils;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
/**
* logika utk mengambil data dari database, dan
* memasang table, kolom, baris yang di butuhkan.
*/
public class KamusDatabase {
private static final String TAG = "KamusDatabase";
// kolom yang akan di pakai di table-nya database kamus
// yaitu kolom KATA dan kolom ARTI_NYA
public static final String KONVERSI = "konversi";
public static final String KATA = SearchManager.SUGGEST_COLUMN_TEXT_1;
public static final String ARTI_NYA = SearchManager.SUGGEST_COLUMN_TEXT_2;
private static final String NAMA_DATABASE = "id_muna";
private static final String TEMPAT_MUNCUL_KATA = "membentangKebawah";
private static final int VERSI_DATABASE = 2;
// perantara antara database dan aplikasi
private final DictionaryOpenHelper pembukaDatabase;
private static final HashMap<String,String> penghubungKolom = buatPenghubungKolom();
private SQLiteDatabase db;
// berikut adalah Constructor-nya
// @parameter context maksudnya pada konteks apa class ini bekerja,
// dalam hal ini adalah utk membuat database
public KamusDatabase(Context context) {
pembukaDatabase = new DictionaryOpenHelper(context);
}
public void openDataBase() throws SQLException
{
db = pembukaDatabase.getWritableDatabase();
}
public void close()
{
pembukaDatabase.close();
}
// membuat penghubung(map) utk semua kolom yg
// akan di butuhkan, yang di dalam-nya akan di pasang
// SQLiteQueryBuilder. Ini adalah suatu cara yang
// baik untuk mendefinisikan nama alias dari kolom2
// tapi hal itu berarti harus menyertakan
// semua kolom yg ada, termasuk kolom key
// dengan demikian peluang ContentProvider terbuka
// lebar untuk mencari kolom tanpa
// mengenal nama asli kolom sehingga
// bisa membuat nama kolom samaran(alias) on the go
// bila di butuhkan
private static HashMap<String,String> buatPenghubungKolom() {
HashMap<String,String> menghubungkan = new HashMap<String,String>();
menghubungkan.put(KONVERSI, KONVERSI);
menghubungkan.put(KATA, KATA);
menghubungkan.put(ARTI_NYA, ARTI_NYA);
menghubungkan.put(BaseColumns._ID, "rowid AS " +
BaseColumns._ID);
menghubungkan.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID, "rowid AS " +
SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID);
menghubungkan.put(SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, "rowid AS " +
SearchManager.SUGGEST_COLUMN_SHORTCUT_ID);
return menghubungkan;
}
// letak-kan cursor pada kata yang di
// identifikasikan dengan rowId
// @parameter barisId adalah Id dari kata yang mau di cari
// @parameter kolom adalah salah satu kolom yg termasuk dalam search,
// kalau kolom==null maka semua
// kolom berarti di ikut sertakan dalam search
// @return Cursor tempatkan cursor pada kata yang cocok, atau
// null kalau tak menemukan kata yang cocok
public Cursor getKata(String paramString)
throws SQLException
{
Cursor localCursor = this.db.query(true, "membentangKebawah", new String[] { "konversi", "SUGGEST_COLUMN_TEXT_1", "SUGGEST_COLUMN_TEXT_2" }, "SUGGEST_COLUMN_TEXT_1='" + paramString + "'", null, null, null, null, null);
if (localCursor != null)
localCursor.moveToFirst();
return localCursor;
}
public Cursor getWord(String barisID, String[] kolom) {
String pilihKata = "rowId = ?";
String[] kolomTempatKata = new String[] {barisID};
return query(pilihKata, kolomTempatKata, kolom);
// sama dengan:
// SELECT <columns> FROM <table> WHERE barisID = <rowId>
}
// Cursor akan menemukan semua kata yang
// sesuai dengan search pencari
// @parameter query adalah string utk mendapatkan isi
// @parameter kolom agar kolom tetentu termasuk
// dalam pencarian, tapi kalau null maka
// semuanya kolom teramsuk dalam pencarian
// @return Cursor ambil semua kata yg cocok,
// atau null kalau tak satupun ygcocok.
public Cursor getWordMatches(String cariKata, String[] kolom) {
String pilihKata = KATA + " MATCH ?";
String[] tempatPenampungKata = new String[] {cariKata+"*"};
return query(pilihKata, tempatPenampungKata, kolom);
// sama seperti mysql
// SELECT <columns> FROM <table> WHERE
// <KEY_WORD> MATCH 'query*'
// yang adalah bentuk search text utk
// FTS3 (tambah sebuah wildcard) didalam kolom kata2
// fts3(full text search versi 3).
// - "rowid" adalah unik utk semua baris tapi
// kita butuh nilai utk kolom "_id" agar
// adapter dapat bekerja, jadi kolom alias adalah
// "_id" untuk "rowid"
// - "rowid" juga perlu di gunakan pada
// SUGGEST_COLUMN_INTENT_DATA alias sebagai
// pertimbangan dalam melakukan
// cek intent data dengan benar.
// Semua alias yg di maksud di jelaskan dalam
// class 'PenghubungData' pada pembuatan query.
// - hal tsb juga dpt di rubah kalau mau search melalui
// ARTI_NYA daripada men-search lewat KATA
// hal tsb dapat di lakukan dengan merubah
// pencarian pakai FTS3 dengan mengganti KEY_WORD dgn
// FTS_VIRTUAL_TABLE (soearch bolak-balik) tapi
// hal tsb akan menyulitkan pengaturan abjad karena
// kadang satu kata akan memiliki arti lebih dari satu kata
}
// melakukan query ke database.
// @parameter 'pilihan' adalah mengatur memilih kata
// @param gudangKataKata adalah pilihan arguments
// untuk komponen "?" dalam pilihan
// @param kolom adalah kolom untuk di isi (return)
// @return A Cursor pada semua baris yang
// cocok dengan tujuan pencarian
private Cursor query(String pilihan, String[] gudangKataKata, String[] kolom) {
// SQLiteBuilder menyediakan sebuah
// penghubung(map)utk semua kolom yg di request dengan
// kolom sebenarnya di databse, membuat
// mekanisme kolom aliasnya yg sederhana
// yang mana PenghubungData tak perlu
// tahu nama kolom sebenarnya
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(TEMPAT_MUNCUL_KATA);
builder.setProjectionMap(penghubungKolom);
Cursor cursor = builder.query(pembukaDatabase.getReadableDatabase(),
kolom, pilihan, gudangKataKata, null, null, null);
if (cursor == null) {
return null;
} else if (!cursor.moveToFirst()) {
cursor.close();
return null;
}
return cursor;
}
// ini utk membuat/membuka databasenya.
private static class DictionaryOpenHelper extends SQLiteOpenHelper {
private final Context bantuBukaDB;
private SQLiteDatabase databasenya;
// catatan bahwa FTS3 tidak mendukung
// hukum kolom oleh karena itu
// tak dapat mendeklarasikan sebuah
// primary key. Namun demikian, "rowid" akan
// di gunakan secara otomais sebagai
// unique identifier maka ketika membuat pencarian,
// kita akan gunakan "_id" sebagai sebuah
// alias untuk "rowid"
private static final String FTS_TABLE_CREATE =
"CREATE VIRTUAL TABLE " + TEMPAT_MUNCUL_KATA +
" USING fts3 (" +
KONVERSI + ", "+
KATA + ", " +
ARTI_NYA + ");";
DictionaryOpenHelper(Context bantuBukaKamus) {
super(bantuBukaKamus, NAMA_DATABASE, null, VERSI_DATABASE);
bantuBukaDB = bantuBukaKamus;
}
@Override
public void onCreate(SQLiteDatabase membuatDatabase) {
databasenya = membuatDatabase;
databasenya.execSQL(FTS_TABLE_CREATE);
masukanDiKamus();
}
// mulai sebuah thread utk masukan sebuah
// table di database beserta kata-katanya
private void masukanDiKamus() {
new Thread(new Runnable() {
public void run() {
try {
masukanKataKata();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}).start();
}
private void masukanKataKata() throws IOException {
Log.d(TAG, "tunggu yah sedang masukan kata...");
final Resources sumberKataKata = bantuBukaDB.getResources();
InputStream masukanKataKata = sumberKataKata.openRawResource(R.raw.id_muna);
BufferedReader membacaKataKata = new BufferedReader(new InputStreamReader(masukanKataKata));
try {
String barisanKataKata;
while ((barisanKataKata = membacaKataKata.readLine()) != null) {
String[] daftarKataKata = TextUtils.split(barisanKataKata, "-");
if (daftarKataKata.length < 3) continue;
long idKataKata = tambahKataKata(daftarKataKata[0].trim(), daftarKataKata[1].trim(), daftarKataKata[2].trim());
if (idKataKata < 0) {
Log.e(TAG, "tak bisa menambah Kata: " + daftarKataKata[0].trim());
}
}
} finally {
membacaKataKata.close();
}
Log.d(TAG, "selesai loading kata-kata.");
}
// tambah kata untuk membentang ke bawah.
// @return rowId or -1 jikalau gagal
public long tambahKataKata(String konversi, String kata, String arti_nya) {
ContentValues jajaranKataKata = new ContentValues();
jajaranKataKata.put(KONVERSI, konversi);
jajaranKataKata.put(KATA, kata);
jajaranKataKata.put(ARTI_NYA, arti_nya);
return databasenya.insert(TEMPAT_MUNCUL_KATA, null, jajaranKataKata);
}
@Override
public void onUpgrade(SQLiteDatabase gantiDataBase, int versiLama, int versiBaru) {
Log.w(TAG, "Database di upgrade dari versi " + versiLama + " ke "
+ versiBaru + ", dan akan menghapus semua data yg lama");
gantiDataBase.execSQL("DROP TABLE IF EXISTS " + TEMPAT_MUNCUL_KATA);
onCreate(gantiDataBase);
}
}
}
mohon pencerahannya yah agan-agan sekalian
0
859
0
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Komunitas Pilihan