歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 基於Android的英文電子詞典

基於Android的英文電子詞典

日期:2017/3/1 10:08:55   编辑:Linux編程

一.提要

英文詞典是手機中經常使用的應用。因此,在本文將結合 Android 來討論如何實現一個 Android 版的英文詞典。實現英文詞典的方法很多。在本文使用了 SQLite 數據庫來保存英文單詞信息。系統通過 SQLite 數據庫中保存的單詞信息來查找到與指定英文對應的中文信息。當然,實現這樣一個英文詞典需要解決一系列技術問題。例如,如何將保存英文單詞信息的數據庫文件隨程序( apk 文件)一起發布;發布後如何打開數據庫。

先看最終效果:

二. 需要解決的幾個問題

1.外部數據庫的調用

首先得准備好詞典的數據庫文件,沒有的點這裡下載。

在res文件夾中新建raw文件夾,然後將數據庫文件拷貝進去,最終像這樣:

接著編寫初始化函數,在主activy中的OnCreate函數調用就可以了:

  1. public void init()
  2. {
  3. try
  4. {
  5. // 獲得dictionary.db文件的絕對路徑
  6. String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
  7. File dir = new File(DATABASE_PATH);
  8. // 如果/sdcard/dictionary目錄中存在,創建這個目錄
  9. if (!dir.exists())
  10. dir.mkdir();
  11. // 如果在/sdcard/dictionary目錄中不存在
  12. // dictionary.db文件,則從res\raw目錄中復制這個文件到
  13. // SD卡的目錄(/sdcard/dictionary)
  14. if (!(new File(databaseFilename)).exists())
  15. {
  16. // 獲得封裝dictionary.db文件的InputStream對象
  17. InputStream is = getResources().openRawResource(
  18. R.raw.dictionary);
  19. FileOutputStream fos = new FileOutputStream(databaseFilename);
  20. byte[] buffer = new byte[8192];
  21. int count = 0;
  22. // 開始復制dictionary.db文件
  23. while ((count = is.read(buffer)) > 0)
  24. {
  25. fos.write(buffer, 0, count);
  26. }
  27. fos.close();
  28. is.close();
  29. }
  30. }
  31. catch (Exception e)
  32. {
  33. }
  34. }

2.數據庫的初始化

創建一個DBHelper 繼承SQLiteOpenHelper,來對打開和關閉數據庫。

  1. package com.example.dictionary;
  2. import android.content.Context;
  3. import android.database.sqlite.SQLiteDatabase;
  4. import android.database.sqlite.SQLiteOpenHelper;
  5. import android.util.Log;
  6. public class DBHelper extends SQLiteOpenHelper {
  7. private static final String DATABASE_NAME = "dictionary.db";
  8. private static final int DATABASE_VERSION = 1;
  9. private final static String DATABASE_PATH = android.os.Environment
  10. .getExternalStorageDirectory().getAbsolutePath()
  11. + "/dictionary";
  12. public DBHelper(Context context) {
  13. //CursorFactory設置為null,使用默認值
  14. super(context, DATABASE_PATH + "/" + DATABASE_NAME, null, DATABASE_VERSION);
  15. System.out.println("New DBHelper!");
  16. }
  17. @Override
  18. public void onCreate(SQLiteDatabase db) {
  19. // TODO Auto-generated method stub
  20. Log.d("DB", "New DB!");
  21. System.out.println("New DB!");
  22. //db.execSQL("CREATE TABLE IF NOT EXISTS thing" + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, title VARCHAR, detail VARCHAR,isdone INTEGER)");
  23. }
  24. @Override
  25. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  26. // TODO Auto-generated method stub
  27. db.execSQL("ALTER TABLE thing ADD COLUMN other STRING");
  28. }
  29. }

3.再封裝一個DBmanager,來管理數據庫的操作

  1. package com.example.dictionary;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.content.ContentValues;
  5. import android.content.Context;
  6. import android.database.Cursor;
  7. import android.database.sqlite.SQLiteDatabase;
  8. public class DBManager {
  9. private DBHelper helper;
  10. private SQLiteDatabase db;
  11. public DBManager(Context context) {
  12. helper = new DBHelper(context);
  13. System.out.println("New DBManager!");
  14. //因為getWritableDatabase內部調用了mContext.openOrCreateDatabase(mName, 0, mFactory);
  15. //所以要確保context已初始化,我們可以把實例化DBManager的步驟放在Activity的onCreate裡
  16. db = helper.getWritableDatabase();
  17. }
  18. /**
  19. * query all persons, return cursor
  20. * @return Cursor
  21. */
  22. public Cursor queryTheCursor(String[] word) {
  23. String sql = "select chinese from t_words where english=?";
  24. Cursor c = db.rawQuery(sql,word);
  25. return c;
  26. }
  27. /**
  28. * close database
  29. */
  30. public void closeDB() {
  31. db.close();
  32. }
  33. }

三.主activity代碼

  1. package com.example.dictionary;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.content.ContentValues;
  5. import android.content.Context;
  6. import android.database.Cursor;
  7. import android.database.sqlite.SQLiteDatabase;
  8. public class DBManager {
  9. private DBHelper helper;
  10. private SQLiteDatabase db;
  11. public DBManager(Context context) {
  12. helper = new DBHelper(context);
  13. System.out.println("New DBManager!");
  14. //因為getWritableDatabase內部調用了mContext.openOrCreateDatabase(mName, 0, mFactory);
  15. //所以要確保context已初始化,我們可以把實例化DBManager的步驟放在Activity的onCreate裡
  16. db = helper.getWritableDatabase();
  17. }
  18. /**
  19. * query all persons, return cursor
  20. * @return Cursor
  21. */
  22. public Cursor queryTheCursor(String[] word) {
  23. String sql = "select chinese from t_words where english=?";
  24. Cursor c = db.rawQuery(sql,word);
  25. return c;
  26. }
  27. /**
  28. * close database
  29. */
  30. public void closeDB() {
  31. db.close();
  32. }
  33. }
Copyright © Linux教程網 All Rights Reserved