英文词典是手机中经常使用的应用

上传人:20****03 文档编号:178696644 上传时间:2021-04-05 格式:DOCX 页数:10 大小:269.68KB
返回 下载 相关 举报
英文词典是手机中经常使用的应用_第1页
第1页 / 共10页
英文词典是手机中经常使用的应用_第2页
第2页 / 共10页
英文词典是手机中经常使用的应用_第3页
第3页 / 共10页
英文词典是手机中经常使用的应用_第4页
第4页 / 共10页
英文词典是手机中经常使用的应用_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《英文词典是手机中经常使用的应用》由会员分享,可在线阅读,更多相关《英文词典是手机中经常使用的应用(10页珍藏版)》请在金锄头文库上搜索。

1、英文词典是手机中经常使用的应用。因此,在本文将结合Android来讨论如何实现一个Android版的英文词典。实现英文词典的方法很多。在本文使用了SQLite数据库来保存英文单词信息。系统通过SQLite数据库中保存的单词信息来查找到与指定英文对应的中文信息。当然,实现这样一个英文词典需要解决一系列技术问题。例如,如何将保存英文单词信息的数据库文件随程序(apk文件)一起发布;发布后如何打开数据库;如何在输入前几个字母后,在AutoCompleteTextView组件提示列表中显示以所输入字符串开头的所有单词。在本章将逐渐给出这些问题的详细答案。关于本文实现的英文电子词典的完整代码请读者参本文

2、提供的源代码。实现电子词典要解决的技术问题及初步的解答 在本节将给出实现电子词典需要解决的主要技术问题,并给出这些技术问题的初步答案或提示。关于详细的答案和代码请读者参阅本文后面的内容。 主要技术问题及解答如下: 1.如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?解答:可以将dictionary.db文件复制到Eclipse Android工程中的resraw目录中,如图1所示。所有在resraw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。 图1将dictionary.db文件复制到resraw目录中2.如何将打开resraw目录中的数据库文件?解

3、答:在Android中不能直接打开resraw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得resraw目录中资源的InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。3.如果在AutoCompleteTextView组件中输入两个及以上字母时显示以

4、所输入字符串开头的所有单词列表?解答:AutoCompleteTextView所使用的Adapter是一个自定义的Adapter类,类的结构如下:public class DictionaryAdapter extends CursorAdapter. .要注意的是,不能将整个数据库中的单词都查出,然后生成一个Adapter对象再使用setAdapter方法来设置AutoCompleteTextView组件的Adapter对象。AutoCompleteTextView组件不会为我们筛选以某个字符串开头的单词。这些工作需要开发人员通过编码来实现。基本思路是在AutoCompleteTextVie

5、w类的afterTextChanged事件中监视AutoCompleteTextView组件中字符的输入情况,每当输入一个字符时就生成一个Adapter对象,然后将新生成的Adapter对象与AutoCompleteTextView关联。显示以输入字符串开头的单词列表的效果如图2所示。图2显示以输入字符串开头的单词列表复制并打开保存英文单词的数据库文件在本文实现的英文词典中使用openDatabase方法来打开数据库文件(该文件在SD卡的dictionary目录中,因此,要想运行本文实现的英文词典,需要在手机或模拟器中需要安装SD卡)。如果该文件不存在,系统会自动创建/sdcard/dicti

6、onary目录,并将resraw目录中的dictionary.db文件复制到/sdcard/dictionary目录中。openDatabase方法的实现代码如下:privateSQLiteDatabase openDatabase()try/获得dictionary.db文件的绝对路径String databaseFilename =DATABASE_PATH+ / +DATABASE_FILENAME;File dir =newFile(DATABASE_PATH);/如果/sdcard/dictionary目录中存在,创建这个目录if(!dir.exists()dir.mkdir();/

7、如果在/sdcard/dictionary目录中不存在/ dictionary.db文件,则从resraw目录中复制这个文件到/ SD卡的目录(/sdcard/dictionary)if(!(newFile(databaseFilename).exists()/获得封装dictionary.db文件的InputStream对象InputStream is = getResources().openRawResource(R.raw.dictionary);FileOutputStream fos =newFileOutputStream(databaseFilename);byte buffe

8、r =newbyte8192;intcount = 0;/开始复制dictionary.db文件while(count = is.read(buffer) 0)fos.write(buffer, 0, count);fos.close();is.close();/打开/sdcard/dictionary目录中的dictionary.db文件SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename,null);returndatabase;catch(Exception e)returnnull;

9、在openDatabase方法中使用了几个常量,这些常量是在程序的主类(Main)中定义的,代码如下:publicclassMainextendsActivityimplementsOnClickListener, TextWatcherprivatefinalString DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()+ /dictionary;privatefinalString DATABASE_FILENAME = dictionary.db;. .查询单词英文

10、词典的核心就是查找英文单词的中文意思。在查找中文意思之前,首先需要使用openDatabase方法在Main类的onCreate方法中打开SQLite数据库,代码如下:database = openDatabase();其中database是在Main类中定义的SQLiteDatabase类型变量。然后在查找按钮的单击事件中添加如下的代码来查找英文单词,并显示中文意思。publicvoidonClick(View view)String sql = select chinese from t_words where english=?;Cursor cursor =database.rawQu

11、ery(sql,newStringactvWord.getText().toString() );String result = 未找到该单词.;/如果查找单词,显示其中文信息if(cursor.getCount() 0)/必须使用moveToFirst方法将记录指针移动到第1条记录的位置cursor.moveToFirst();result = cursor.getString(cursor.getColumnIndex(chinese);/显示查询结果对话框newAlertDialog.Builder(this).setTitle(查询结果).setMessage(result).setP

12、ositiveButton(关闭,null).show();讲到这里我们应该了解一个dictionary.db中的t_words表的结果,该表只有两个字段:english和chinese。分别表示单词的英文和中文描述。如果要获得单词的中文描述,只需要查找chinese字段即可。如onClick方法中的代码所示。查询单词的效果如图3所示。图3查询英文单词如果显示以输入字符串开头的单词列表虽然到目前为止,我们的英文词典已经可以正常工作了,但为了方便读者使用,在本节将添加单词输入的自动提示功能。也就是说,如果读者在AutoCompleteTextView组件中输入单词的前几个字母,该组件就会自动列出

13、数据库中所有以该字符串开头的单词。效果如图2所示。拥有这样的功能就可以使用户在只知道单词的前几个字母时也可以查找到相应的单词。由于AutoCompleteTextView组件使用了自定义的Adapter类,下面先给出这个自定义的Adapter类的完整代码。publicclassDictionaryAdapterextendsCursorAdapterprivateLayoutInflater layoutInflater;OverridepublicCharSequence convertToString(Cursor cursor)returncursor =null? : cursor.g

14、etString(cursor.getColumnIndex(_id);/用于将_id字段(也就是english字段)的值设置TextView组件的文本/view参数表示用于显示列表项的TextView组件privatevoidsetView(View view, Cursor cursor)TextView tvWordItem = (TextView) view;tvWordItem.setText(cursor.getString(cursor.getColumnIndex(_id);OverridepublicvoidbindView(View view, Context context, Cursor cursor)setView(view, cursor);OverridepublicView newView(Context context, Cursor cursor, ViewGroup parent)View view =layoutInflater.inflate(R.layout.word_li

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号