Android乐学成语的实现分析
下面是效果图
目录工程如下:
具体实现以及写的过程中遇到的问题
第一步:建立数据库,像这种比较繁多的数据,可以用execl表格来做,然后Navict可视化工具,导入进去
加载数据数据库到项目中来,在res目录下建立一个raw文件夹,
DBOpenHelper.java
package cn.deu.bztc.happyidiom.db;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import cn.deu.bztc.happyidiom.activity.R;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
public class DBOpenHelper {
private final int BuFFWER_SIZE=400000;//缓冲区大小
public static final String DB_NAME="idioms.db";//保存的数据库文件名
public static final String PACKAGE_Name="cn.deu.bztc.happyidiom.activity";
//应用的包名
public static final String DB_PATH="/data"
+Environment.getDataDirectory().getAbsolutePath()+"/"
+PACKAGE_Name+"/databases";//在手机里存放数据库的位置
private Context context;
public DBOpenHelper(Context context) {
super();
this.context = context;
}
public SQLiteDatabase openDatabase(){
try{
File myDataPath=new File(DB_PATH);
if(!myDataPath.exists()){
myDataPath.mkdirs(); //如果没有这个目录则创建
}
String dbfile=myDataPath+"/"+DB_NAME;
if(!(new File(dbfile).exists())){
//判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
InputStream is=context.getResources().openRawResource(R.raw.idioms);
FileOutputStream fos=new FileOutputStream(dbfile);
byte[] buffer=new byte[BuFFWER_SIZE];
int count=0;
while((count=is.read(buffer))>0){
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(dbfile, null);
return db;
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
}
上面的代码实现功能主要是使用输入输出流将idioms.db复制到手机中默认存放 数据库的位置
下面我们来测试一下是否成功
在AndroidManifest.xml中建立单元测试环境
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.deu.bztc.happyidiom.activity"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/l