乐学成语——android(一)
来源:互联网 发布:苹果手机刷windows系统 编辑:程序博客网 时间:2024/04/29 15:55
首先我们先创建如下几个包
其中activity包中用于存放所有活动相关的代码,db包中用于存放所有数据库相关的文件的代码,entity包用于存放所有实体相关的代码,dao包中用于存放数据操作相关的代码,util包用于存放所有工具相关的代码。
在做项目之前我们首先要将数据库文件放在项目中,在res下新建raw文件将idioms.db数据库文件拷入就可以了。
然后再db包下新建一个DBOpenHelper类,代码如下所示:
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.happyidiom";public static final String DB_PATH="/data" +Environment.getDataDirectory().getAbsolutePath()+"/" +PACKAGE_NAME+"/databases";private Context context;public DBOpenHelper(Context context) {// TODO Auto-generated constructor stubthis.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) {// TODO: handle exceptionLog.e("Datebase", "IO exception");e.printStackTrace();}return null;}}其主要功能是使用输入输出流将idioms.db复制到手机中默认存放数据库的位置。
搭建单元测试环境,修改AndroidManifest.xml中的代码添加如下代码
<uses-library android:name="android.test.runner" />
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.happyidiom" > </instrumentation>编写测试类DBOpenHelperTest继承AndroidTestCase代码如下:
public class DBOpenHelperTest extends AndroidTestCase {public void testDBOpen(){DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());dbOpenHelper.openDatabase();}}进行单元测试后会得到下图所示的结果:
另外,数据库中的Animal表还存在一个对应的实体类,因此我们需要在entity包下新建一个Animal类,代码如下所示:
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;}}
</pre><pre name="code" class="java">接着我们还需要创建一个AnimalDao类,这个类将会把一些常用的数据库操作封装起来,以便我们以后的使用,代码如下所示:
<pre name="code" class="java">public class AnimalDao {private static AnimalDao animalDao;private SQLiteDatabase db;//将构造方法私有化private AnimalDao(Context context) {// TODO Auto-generated constructor stubDBOpenHelper dbHelper = new DBOpenHelper(context);db = dbHelper.openDatabase();}//获取AnimalDao的实例 Instance=实例public synchronized static AnimalDao getInstance(Context context){if(animalDao==null){animalDao=new AnimalDao(context);}return animalDao;}//读取数据库中所有的动物类成语/** * Cursor 是每行的集合。使用 moveToFirst() 定位第一行。你必须知道每一列的名称。你必须知道每一列的数据类型。Cursor 是一个随机的数据源。所有的数据都是通过下标取得 */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.setExplain(cursor.getString(cursor.getColumnIndex("explain")));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;}}
编写单元测试类AnimalDaoTest继承 AndroidTextCase,代码如下所示:
public class AnimalDaoTest extends AndroidTestCase {public void testGetAllAnimals(){AnimalDao animalDao = AnimalDao.getInstance(getContext());List<Animal> animals = animalDao.getAllAnimals();System.out.println(animals.size());for(Animal animal:animals){System.out.println(animal.getName());}}}运行单元测试就会得到下图所示的结果:
1 0
- 乐学成语——android(一)
- Android小程序——乐学成语实现(一)
- Android小程序-乐学成语学习(一)
- 乐学成语一
- Android---乐学成语
- 乐学成语——显示每个成语的详细信息
- Android小程序——乐学成语实现(二)
- Android小程序——乐学成语实现(三)
- Android小程序——乐学成语实现(四)
- Android之乐学成语
- 乐学成语——数据库创建(导入、打开)
- 乐学成语——数据库操作
- 乐学成语——导入篇
- 乐学成语——第一部分
- 乐学成语——完整实现
- 乐学成语——第二部分
- 乐学成语——第三部分
- 乐学成语——第四部分
- [leetcode] 346. Moving Average from Data Stream 解题报告
- MySQL 常用函数 日期和时间函数
- 第十三周上机实践项目2(3):动物这样叫
- Jenkins连接svn报E170001错误的解决办法
- 天才小毒妃 > 第846章 她不属于这个世界
- 乐学成语——android(一)
- 实现复数类中的运算符重载 友元函数
- 关于线程的中断机制
- Setup Compile Environment on Windows Cygwin For CC2650/CC2538 Contiki 6LowPAN
- POJ1953
- 【Swift】iOS导航栏错乱的原因
- Dism 错误: 1450
- 第14周 阅读项目(3)
- 【十三】分数的重载,加减乘除以及比较