UnzipAssets.java

package com.hu.andstar;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import android.content.Context;public class UnzipAssets {/** * 解压assets的zip压缩文件到指定目录 * @param context上下文对象 * @param assetName压缩文件名 * @param outputDirectory输出目录 * @param isReWrite是否覆盖 * @throws IOException */public static void unZip(Context context, String assetName,String outputDirectory,boolean isReWrite) throws IOException {//创建解压目标目录File file = new File(outputDirectory);//如果目标目录不存在,则创建if (!file.exists()) {file.mkdirs();}//打开压缩文件InputStream inputStream = context.getAssets().open(assetName);ZipInputStream zipInputStream = new ZipInputStream(inputStream);//读取一个进入点ZipEntry zipEntry = zipInputStream.getNextEntry();//使用1Mbufferbyte[] buffer = new byte[1024 * 1024];//解压时字节计数int count = 0;//如果进入点为空说明已经遍历完所有压缩包中文件和目录while (zipEntry != null) {//如果是一个目录if (zipEntry.isDirectory()) {file = new File(outputDirectory + File.separator + zipEntry.getName());//文件需要覆盖或者是文件不存在if(isReWrite || !file.exists()){file.mkdir();}} else {//如果是文件file = new File(outputDirectory + File.separator+ zipEntry.getName());//文件需要覆盖或者文件不存在,则解压文件if(isReWrite || !file.exists()){file.createNewFile();FileOutputStream fileOutputStream = new FileOutputStream(file);while ((count = zipInputStream.read(buffer)) > 0) {fileOutputStream.write(buffer, 0, count);}fileOutputStream.close();}}//定位到下一个文件入口zipEntry = zipInputStream.getNextEntry();}zipInputStream.close();}}

用于第一次运行时解压数据文件到SD卡:

MainActivity.java:

package com.hu.andstar;import java.io.File;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.EditText;import android.widget.ImageButton;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity {// 指定数据库文件所在目录private final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/andstar";// 指定数据库文件名private final String DATABASE_FILENAME = "data.db";private SQLiteDatabase database = null;private EditText etInput = null;private ImageButton ibSearch = null;private ListView lvWords = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 找到控件etInput = (EditText) findViewById(R.id.editTextInput);ibSearch = (ImageButton) findViewById(R.id.imageButtonSearch);lvWords = (ListView) findViewById(R.id.listViewWords);initAll();}private void initAll() {// 获取并打开数据库database = openDatabase();// 设置ListView数据lvWords.setAdapter(getIndexs(""));// 当输入框文本改变时,让ListView现实的数据也随之改变etInput.addTextChangedListener(new TextWatcher() {public void onTextChanged(CharSequence s, int start, int before,int count) {}public void beforeTextChanged(CharSequence s, int start, int count,int after) {}public void afterTextChanged(Editable s) {// 重新设置ListView的数据lvWords.setAdapter(getIndexs(etInput.getText().toString()));}});// 当ListView子项单击时,让文本框内容变成该项文本lvWords.setOnItemClickListener(new AdapterView.OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {etInput.setText(((TextView) view).getText());etInput.selectAll();}});// 设置查询按钮事件ibSearch.setOnClickListener(new OnClickListener() {public void onClick(View v) {// 查询SQL语句String sql = "SELECT dContent FROM words WHERE dIndex = @arg";Cursor cursor = database.rawQuery(sql, new String[] { etInput.getText().toString() });// 如果查询有结果,将第一个结果传递给显示结果的Activityif (cursor.getCount() > 0) {cursor.moveToFirst();Intent intent = new Intent();intent.putExtra("word", etInput.getText().toString());intent.putExtra("explain", cursor.getString(0));cursor.close();intent.setClass(MainActivity.this, ExplainActivity.class);MainActivity.this.startActivity(intent);}}});}// 获取ListView所要显示的数据ArrayAdapter<String> getIndexs(String input) {List<String> list = new ArrayList<String>();// 获取32条大于等于该文本的数据String sql = "SELECT dIndex FROM words WHERE dIndex >= @arg limit 0,32";// 执行查询语句Cursor cursor = database.rawQuery(sql, new String[] { input });if (cursor.getCount() > 0) {while (cursor.moveToNext()) {list.add(cursor.getString(0));}cursor.close();} else {// 如果获取结果为空list.add(getString(R.string.no_match));}return new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1, list);// 返回ArrayAdapter}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// 退出选项if (item.getItemId() == R.id.menu_exit) {Builder builder = new Builder(MainActivity.this);builder.setMessage("确认退出吗?");builder.setTitle("提示");builder.setPositiveButton(R.string.button_positive,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {System.exit(0);}});builder.setNegativeButton(R.string.button_cancle, null);builder.show();} else {}return super.onOptionsItemSelected(item);}private SQLiteDatabase openDatabase() {// 打开数据库函数try {String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;File databaseFile = new File(databaseFilename);// 如果SD卡上数据库文件不存在,则解压数据库文件if (!databaseFile.exists()) {UnzipAssets.unZip(MainActivity.this, "data.zip", DATABASE_PATH,true);}// 返回打开的数据库return SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);} catch (Exception e) {e.printStackTrace();}return null;}}

查词界面;


Android利用SQLite制作最简单成语小词典

ExplainActivity.java

package com.hu.andstar;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.webkit.WebView;import android.widget.TextView;/*用于显示查询结果 * 使用WebView显示 */public class ExplainActivity extends Activity{private TextView tvWord = null;private WebView tvExplain = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_explain);tvWord = (TextView) findViewById(R.id.textViewWord);tvExplain = (WebView) findViewById(R.id.webViewExplain);Intent intent = getIntent();tvWord.setText(intent.getStringExtra("word"));String htmText = intent.getStringExtra("explain");tvExplain.loadDataWithBaseURL(null,htmText, "text/html",  "utf-8", null);}}

用于显示解释:


Android利用SQLite制作最简单成语小词典

更多相关文章

  1. Android读写文件示例
  2. android 通知 手机 媒体 数据库 更新
  3. 获得android下面,所有的数据库
  4. Android activity之间传递数据
  5. 如何android多Activity间共享数据 (extends Application)
  6. android的数据库API操作
  7. Android 解压zip文件
  8. Android根据URL下载文件保存到SD卡

随机推荐

  1. Android+JNI调用–文件操作
  2. Android(安卓)开发环境下载连接
  3. AIDL跨进程通讯
  4. android直接找一个文件,部分编译等实用
  5. Android系统源码数据库(mmssms.db)(转)
  6. Android中对Handle机制的理解
  7. Android(安卓)Pull解析
  8. Android中文API(97)―― ContextMenu
  9. android 基于百度地图api获取经纬度
  10. Android:ImageView如何显示网络图片