基于Android的英文电子词典
一.提要
英文词典是手机中经常使用的应用。因此,在本文将结合 Android 来讨论如何实现一个 Android 版的英文词典。实现英文词典的方法很多。在本文使用了 SQLite 数据库来保存英文单词信息。系统通过 SQLite 数据库中保存的单词信息来查找到与指定英文对应的中文信息。当然,实现这样一个英文词典需要解决一系列技术问题。例如,如何将保存英文单词信息的数据库文件随程序( apk 文件)一起发布;发布后如何打开数据库。
先看最终效果:
二. 需要解决的几个问题
1.外部数据库的调用
首先得准备好词典的数据库文件,没有的点这里下载。
在res文件夹中新建raw文件夹,然后将数据库文件拷贝进去,最终像这样:
接着编写初始化函数,在主activy中的OnCreate函数调用就可以了:
public void init(){try{// 获得dictionary.db文件的绝对路径String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;File dir = new File(DATABASE_PATH);// 如果/sdcard/dictionary目录中存在,创建这个目录if (!dir.exists())dir.mkdir();// 如果在/sdcard/dictionary目录中不存在// dictionary.db文件,则从res\raw目录中复制这个文件到// SD卡的目录(/sdcard/dictionary)if (!(new File(databaseFilename)).exists()){// 获得封装dictionary.db文件的InputStream对象InputStream is = getResources().openRawResource(R.raw.dictionary);FileOutputStream fos = new FileOutputStream(databaseFilename);byte[] buffer = new byte[8192];int count = 0;// 开始复制dictionary.db文件while ((count = is.read(buffer)) > 0){fos.write(buffer, 0, count);}fos.close();is.close();}}catch (Exception e){}}
2.数据库的初始化
创建一个DBHelper 继承SQLiteOpenHelper,来对打开和关闭数据库。
package com.example.dictionary;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;public class DBHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "dictionary.db"; private static final int DATABASE_VERSION = 1; private final static String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()+ "/dictionary"; public DBHelper(Context context) { //CursorFactory设置为null,使用默认值 super(context, DATABASE_PATH + "/" + DATABASE_NAME, null, DATABASE_VERSION); System.out.println("New DBHelper!");} @Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubLog.d("DB", "New DB!");System.out.println("New DB!");//db.execSQL("CREATE TABLE IF NOT EXISTS thing" + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, title VARCHAR, detail VARCHAR,isdone INTEGER)"); }@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubdb.execSQL("ALTER TABLE thing ADD COLUMN other STRING"); }}
3.再封装一个DBmanager,来管理数据库的操作
package com.example.dictionary;import java.util.ArrayList;
import java.util.List; import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; public class DBManager { private DBHelper helper; private SQLiteDatabase db; public DBManager(Context context) { helper = new DBHelper(context); System.out.println("New DBManager!");//因为getWritableDatabase内部调用了mContext.openOrCreateDatabase(mName, 0, mFactory); //所以要确保context已初始化,我们可以把实例化DBManager的步骤放在Activity的onCreate里 db = helper.getWritableDatabase(); }/** * query all persons, return cursor * @return Cursor */ public Cursor queryTheCursor(String[] word) { String sql = "select chinese from t_words where english=?"; Cursor c = db.rawQuery(sql,word); return c; } /** * close database */ public void closeDB() { db.close(); }
}
三.主activity代码
package com.example.dictionary;import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;public class MainActivity extends Activity {private DBManager mgr; private final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()+ "/dictionary";private final String DATABASE_FILENAME = "dictionary.db";private Button SearchBtn;private EditText inputText;private TextView resultText;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mgr=new DBManager(this);SearchBtn=(Button)findViewById(R.id.button1);inputText=(EditText)findViewById(R.id.editText1);resultText=(TextView)findViewById(R.id.textView1);SearchBtn.setOnClickListener(new SearchOnClickListener());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}public class SearchOnClickListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubCursor cursor = mgr.queryTheCursor(new String[]{ inputText.getText().toString() });String result = "未找到该单词.";// 如果查找单词,显示其中文的意思if (cursor.getCount() > 0){// 必须使用moveToFirst方法将记录指针移动到第1条记录的位置cursor.moveToFirst();result = cursor.getString(cursor.getColumnIndex("chinese"));}// 显示查询结果对话框//new AlertDialog.Builder(this).setTitle("查询结果").setMessage(result).setPositiveButton("关闭", null).show();resultText.setText(result);}}public void init(){try{// 获得dictionary.db文件的绝对路径String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;File dir = new File(DATABASE_PATH);// 如果/sdcard/dictionary目录中存在,创建这个目录if (!dir.exists())dir.mkdir();// 如果在/sdcard/dictionary目录中不存在// dictionary.db文件,则从res\raw目录中复制这个文件到// SD卡的目录(/sdcard/dictionary)if (!(new File(databaseFilename)).exists()){// 获得封装dictionary.db文件的InputStream对象InputStream is = getResources().openRawResource(R.raw.dictionary);FileOutputStream fos = new FileOutputStream(databaseFilename);byte[] buffer = new byte[8192];int count = 0;// 开始复制dictionary.db文件while ((count = is.read(buffer)) > 0){fos.write(buffer, 0, count);}fos.close();is.close();}}catch (Exception e){}}
}
参考:http://dev.10086.cn/cmdn/wiki/index.php?edition-view-5796-1.html
基于Android的英文电子词典相关推荐
- android电子英语词典背景介绍,实现基于Android的英文电子词典
本文为原创,如需转载,请注明作者和出处,谢谢! 英文词典是手机中经常使用的应用.因此,在本文将结合Android来讨论如何实现一个Android版的英文词典.实现英文词典的方法很多.在本文使用了SQL ...
- android 编程词典,基于Android的英文词典的实现方法
英文词典是手机中经常使用的应用.因此,在本文将结合Android来讨论如何实现一个Android版的英文词典.实现英文词典的方法很多.在本文使用了SQLite数据库来保存英文单词信息.系统通过SQLi ...
- 病历管理系统代码android,基于Android系统移动电子病历系统设计.doc
基于Android系统移动电子病历系统设计 基于Android系统移动电子病历系统设计 摘要 针对当前医疗环境下的病历管理环节,在以经济适用的前提下设计基于Android客户端和WIFI网络的移动电子 ...
- 基于android的图书馆电子阅览
需求信息: 数据库人工备份上机人员信息:上机人员学号.姓名.专业.上机时间.缴费金额.使用的电脑编号.下机时间.消费金额.换机(换机前的电脑编号.换机原因(分为死机.不能开机.中病毒 ).换机后的电脑 ...
- 基于android的电子词典设计_基于Android的电子词典软件的设计与实现 (含外文翻译).doc...
基于Android的电子词典软件的设计与实现 (含外文翻译) LANZHOU UNIVERSITY OF TECHNOLOGY 毕业设计 题 目 基于Android的电子词典软件的设计与实现 学生姓名 ...
- Android词典毕业设计,毕业设计——电子词典系统的设计与实现
毕业设计--电子词典系统的设计与实现(开题报告,外文翻译,文献综述,设计报告,毕业论文) 摘要 随着社会的发展,在人们生活中学习外语变得越来越重要. 现在许多文件和资料都是电子版,所以更多人喜欢通过电 ...
- 基于Android的上位软件,基于Android的电子套结机上位机软件设计
摘要: 电子套结机通常以工业计算机或触摸式控制面板作为设备控制的上位机,它们的优点在于功能完善,但是价格较贵,便携性不足,很多场合下不能满足移动控制的需求.基于Android操作系统的便携设备不仅具有 ...
- android词典论文,基于Android的电子词典软件的设计与实现毕业论文doc.doc
基于Android的电子词典软件的设计与实现毕业论文doc 调-- 乂拿LANZHOU UNIVERSITY OF TECHNOLOGY毕兆设计题目基于Android的电子词典软件的ig计与剪见学生姓 ...
- android词典论文,基于Android的电子词典软件的设计与实现(毕业论文doc)资料.doc...
基于Android的电子词典软件的设计与实现(毕业论文doc)资料 调-- 乂拿LANZHOU UNIVERSITY OF TECHNOLOGY毕兆设计题目基于Android的电子词典软件的ig计与剪 ...
- 基于android的电子词典设计_基于Android的电子词典的设计
本毕业设计课题主要分为两个模块:即英-汉查询模块和汉语查询模块.在此两模块都是使用的Sqlite数据库,且数据库为.db文件. 对于电子词典,自己会根据任务书下达的任务来一步一步完成,实现系统的设计与 ...
最新文章
- AI框架外部用户贡献代码
- 嵌入式为什么不受欢迎?谈谈我对嵌入式的理解!
- 经典:盘点80后男人找老婆的20条标准
- 2020-12-08 tensorflow model.fit_generator()函数参数
- [Spring5]IOC容器_Bean管理XML方式_p名称空间注入
- sqldeveloper的查看执行计划快捷键F10
- 虚拟接口+tx+linux,Linux使用笔记: 解决Xen虚拟机中VLAN接口不能ping大包的问题
- Android -- 自定义ScrollView实现放大回弹效果
- 使用Pycharm将代码同步到GitHub
- Python 基础 —— 文件
- ASP.NET随机显示数据库记录
- 历届试题 填字母游戏
- MyBatis整合Spring的实现(7)
- jpress连接不上mysql_JPress安装部署超详细文档
- 早起—怎样开启高效的一天?
- linux curse库函数,curse
- 低代码开发平台是什么?
- 实例:用C#.NET手把手教你做微信公众号开发(13)--事件消息处理之取消关注
- 关于ELF格式文件里面的调试信息解读
- 关于C++ Boost库的使用