# Android 实训案例
研究一下数据库。所以写的还是很详细的,各位看官,耐着性子看完,实现结果不重要,思路一定要清晰,我们做一个简单的项目,所以也就设计的比较简陋了,首先新建一个项目——AnswerSystem
![](https://www.writebug.com/myres/static/uploads/2021/11/16/26bbf13951ea4b4744c87ba08c96491c.writebug)
## 一.实现项目框架
主页面就是一个问题,四个答案,还有一个正确答案,最后就是翻页了,正确答案默认是隐藏的,所以我们的 layout_mian.xml 是这样实现的
```
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"><ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="问:刘桂林是何许人也?"
android:textColor="@color/colorAccent"
android:textSize="22sp"
android:textStyle="bold" />
<RadioGroup
android:id="@+id/mRadioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<!--四个选项-->
<RadioButton
android:id="@+id/RadioA"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="大帅哥" />
<RadioButton
android:id="@+id/RadioB"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="参照A" />
<RadioButton
android:id="@+id/RadioC"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="参照B" />
<RadioButton
android:id="@+id/RadioD"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="参照C" />
<!--正确答案,默认是隐藏的-->
<TextView
android:visibility="invisible"
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="正确答案:肯定选A呀!"
android:textColor="@color/colorPrimaryDark"
android:textSize="18sp" />
</RadioGroup>
</LinearLayout>
</ScrollView>
<!--切换题目-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn_up"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="上一题" />
<Button
android:id="@+id/btn_down"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="下一题" />
</LinearLayout>
```
我们来预览一下
![](https://www.writebug.com/myres/static/uploads/2021/11/16/1936a2ba216612b36f51738f93c75458.writebug)
## 二.数据库的设计
数据库的话,我们采用一个轻量级数据库编辑器去编辑 SQLite Database Browser
当然,你也可直接搜索这个软件也是可以下载到的,然后点击安装,一步步安装就可以完成了
![](https://www.writebug.com/myres/static/uploads/2021/11/16/95523190c7427c5f8a91a5ae93c5f468.writebug)
我们在这里就点击新建数据库——question.db,然后就添加了一些参数,主要就是编号和问题,四个选项,答案,解析等
![](https://www.writebug.com/myres/static/uploads/2021/11/16/a51836d0360efe3b912c84961047957c.writebug)
然后我们点击浏览数据,这里我们可以看到我这里设置的表明对应的说明
![](https://www.writebug.com/myres/static/uploads/2021/11/16/84a91fbb64d84fce4e5a91578c8c7486.writebug)
既然这样,那我们就多写几个问题吧
![](https://www.writebug.com/myres/static/uploads/2021/11/16/0480e38ba6517908e6804a6592a79129.writebug)
紧接着,我们要考虑的一个问题就是,把这个数据库放到软件的数据库里面,所以我先把 question.db 放在 assets 目录下,然后通过以下的方法区拷贝到 app 目录
```
/**
* 将数据库拷贝到相应目录
*/
private void initFile() {
//判断数据库是否拷贝到相应的目录下
if (new File(DB_PATH + DB_NAME).exists() == false) {
File dir = new File(DB_PATH);
if (!dir.exists()) {
dir.mkdir();
}
//复制文件
try {
InputStream is = getBaseContext().getAssets().open(DB_NAME);
OutputStream os = new FileOutputStream(DB_PATH + DB_NAME);
//用来复制文件
byte[] buffer = new byte[1024];
//保存已经复制的长度
int length;
//开始复制
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
//刷新
os.flush();
//关闭
os.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
三.答题功能实现
当这个方法执行了之后,你运行了软件,你在 data/data/包名/database 目录下就可以看到这个数据库了,这样我们就可以先去定义一个类专门用来存储数据——Question
```
package com.lgl.answersystem;
/**
- 保存数据库数据
- Created by LGL on 2016/6/4.
*/
public class Question {
/**
- 对应的就是Filter1-7 还有一个选中答案
*/
//编号
public int ID;
//问题
public String question;
//四个选项
public String answerA;
public String answerB;
public String answerC;
public String answerD;
//答案
public int answer;
//详情
public String explaination;
//用户选中的答案
public int selectedAnswer;
}
```
紧接着,我们写一个数据库的类,专门连接数据库和获取数据——DBService
```
package com.lgl.answersystem;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
/**
- 连接数据库
- Created by LGL on 2016/6/4.
*/
public class DBService {
private SQLiteDatabase db;
//构造方法
public DBService() {
//连接数据库
db = SQLiteDatabase.openDatabase("/data/data/com.lgl.answersystem/databases/question.db", null, SQLiteDatabase.OPEN_READWRITE);
}
//获取数据库的数据
public List<Question> getQuestion() {
List<Question> list = new ArrayList<>();
//执行sql语句
Cursor cursor = db.rawQuery("select * from question", null);
if (cursor.getCount() > 0) {
cursor.moveToFirst();
int count = cursor.getCount();
//遍历
for (int i = 0; i < count; i++) {
cursor.moveToPosition(i);
Question question = new Question();
//ID
question.ID = cursor.getInt(cursor.getColumnIndex("Field1"));
//问题
question.question = cursor.getString(c