乐学成语(1)

  1. 新建数据库跟表。
  2. 新建项目,在res目录下新建raw文件夹,将素材中idioms.db数据库复制到该文件夹下,这是因为raw文件夹中的东西,Android会原封不动的拷贝到程序中,而不会转换为二进制文件。
    在db包下新建一个DBOpenHelper类,代码如下:
package cn.edu.bztc.happyidiom.db;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import com.example.happyidom.R;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;
/**
 * 实现将数据库文件从raw目录下拷贝到手机里存放数据库的位置
 * @author zy
 *
 */
public class DBOpenHelper {
    private final int BUFFER_SIZE=400000;//缓冲区的大小
    public static final String DB_NAME="idioms.db";//保存的数据库文件名
    public static final String PACKAGE_NAME="com.example.happyidom";//应用的包名
    //如可查找应用的包名,????出现的错误
    public static final String DB_PATH="/data"
    +Environment.getDataDirectory().getAbsolutePath()+"/"
    +PACKAGE_NAME+"/databases";//在手机存放数据库的位置
    private Context context;
    public DBOpenHelper(Context context){
        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[BUFFER_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(FileNotFoundException e){
            Log.e("Database","File not found");
            e.printStackTrace();
        }catch (IOException e) {
            Log.e("Database","IO exception");
            e.printStackTrace();
        }
        return null;
    }
}

以上代码实现的功能主要是使用输入输出流将idioms.db复制到手机中默认存放数据库的位置,为验证是否成功搭建单元测试环境,
修改AndroidManifest.xml

 </application>

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.example.happyidom" >
    </instrumentation>

</manifest>

在test下新DBOpenHelperTestCase

package cn.edu.bztc.happyidiom.test;

import cn.edu.bztc.happyidiom.db.DBOpenHelper;
import android.test.AndroidTestCase;

public class DBOpenHelperTest  extends AndroidTestCase{
    public void testDBCopy(){
        DBOpenHelper dbOpenHelper=new DBOpenHelper(getContext());
        dbOpenHelper.openDatabase();
    }
}

测试效果如下:

  1. src目录下新建七个包,adapter包用于存放适配器,activity包用于存放页面活动相关的代码,dao包用于存放数据操作相关的代码,db包用于数据库相关的代码,util包用于存放所有工具相关的代码,test包用于存放单元测试类,entity用于存放实体类

    1. 首先在strings.xml页面定义所需要的文本信息。

      strings.xml页面内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">HappyIdom</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="title_study">学习</string>
    <string name="title_search">搜搜</string>
    <string name="title_game">游戏</string>
    <string name="title_save">收藏</string>
    <string name="title_help">帮助</string>
    <string-array name="category">
        <item>动物类</item>
        <item>自然类</item>
        <item>人物类</item>
        <item>季节类</item>
        <item>数字类</item>
        <item>寓言类</item>
        <item>其他</item>
    </string-array>
    <string-array name="name">
        <item>学习</item>
        <item>搜搜</item>
        <item>游戏</item>
        <item>收藏</item>
        <item>帮助</item>
    </string-array>
    <string name="title_activity_study">StudyActivity</string>
    <string name="title_activity_study_animal">StudyAnimalActivity</string>
    <string name="title_activity_ma">MaActivity</string>
    <string name="title_activity_query">QueryActivity</string>
</resources>
  1. 在entity实体包下建立相应的Animal类,并建立AnimalDao类,会把一些常用的数据库操作类封装起来,方便以后的使用
    AnimalDao代码如下:
package cn.edu.bztc.happyidiom.dao;
import java.util.ArrayList;
import java.util.List;
import cn.edu.bztc.happyidiom.db.DBOpenHelper;
import cn.edu.bztc.happyidiom.entity.Animal;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.accessibility.AccessibilityNodeInfo;
public class AnimalDao {
    private static AnimalDao animalDao;
    private SQLiteDatabase db;
    /**
     * 将构造方法私有化
     */
    private AnimalDao(Context context){
        DBOpenHelper dbHelper=new DBOpenHelper(context);
        db=dbHelper.openDatabase();
    }
    /**
     * 获取AnimalDao的示例
     */
    public synchronized static AnimalDao getInstance(Context context){
        if(animalDao==null){
            animalDao=new AnimalDao(context);
        }
        return animalDao;
    }
    /**
     * 从数据库读取所有的动物类成语
     */
    public List<Animal> getAllAnimals(){
        List<Animal> list = new ArrayList<Animal>();
        Cursor cursor=db.query("animal", null, null, null, null, null, null);
        if(cursor.moveToFirst()){
            do{
            Animal animal=new Animal();
            animal.setId(cursor.getInt(cursor.getColumnIndex("_id")));
            animal.setName(cursor.getString(cursor.getColumnIndex("name")));
            animal.setPronounce(cursor.getString(cursor.getColumnIndex("pronounce")));
            animal.setAntonym(cursor.getString(cursor.getColumnIndex("antonym")));
            animal.setHomoionym(cursor.getString(cursor.getColumnIndex("homoionym")));
            animal.setDerivation(cursor.getString(cursor.getColumnIndex("derivation")));
            animal.setExamples(cursor.getString(cursor.getColumnIndex("examples")));
            list.add(animal);
        }while(cursor.moveToNext());

    }
        return list;
    }     
}

Animal类代码如下:

package cn.edu.bztc.happyidiom.entity;
public class Animal {
    private int id;
    private String name;//成语名称
    private String pronounce;//成语发音
    private String explain;//成语解释
    private String antonym;//反义词
    private String homoionym;//同义词
    private String derivation;//源自
    private String examples;//例子
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPronounce() {
        return pronounce;
    }
    public void setPronounce(String pronounce) {
        this.pronounce = pronounce;
    }
    public String getExplain() {
        return explain;
    }
    public void setExplain(String explain) {
        this.explain = explain;
    }
    public String getAntonym() {
        return antonym;
    }
    public void setAntonym(String antonym) {
        this.antonym = antonym;
    }
    public String getHomoionym() {
        return homoionym;
    }
    public void setHomoionym(String homoionym) {
        this.homoionym = homoionym;
    }
    public String getDerivation() {
        return derivation;
    }
    public void setDerivation(String derivation) {
        this.derivation = derivation;
    }
    public String getExamples() {
        return examples;
    }
    public void setExamples(String examples) {
        this.examples = examples;
    }
}

编辑单元测试:

package cn.edu.bztc.happyidiom.test;

import java.util.List;

import cn.edu.bztc.happyidiom.dao.AnimalDao;
import cn.edu.bztc.happyidiom.entity.Animal;
import android.test.AndroidTestCase;

public class AnimalTest extends AndroidTestCase {
    public void textGetAllAnimals(){
        AnimalDao animalDao=AnimalDao.getInstance(getContext());
        List<Animal> animals=animalDao.getAllAnimals();
        System.out.println(animals.size());
        for(Animal animal:animals){
            System.out.println(animal.getName());
        }
    }
}

效果图

发布了37 篇原创文章 · 获赞 7 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章