歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

基於Android的英文電子詞典

一.提要

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

先看最終效果:

二. 需要解決的幾個問題

1.外部數據庫的調用

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

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

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

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

2.數據庫的初始化

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

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

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

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

三.主activity代碼

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