Android 身份注册系统
身份证信息登记,以及记录查看
前言
前段时间有个大学学弟让我帮忙做一个身份注册系统,正好项目上没什么事情,就有了今天为学弟学妹们造福的文章和参考Demo。
一、开发环境
Android Studio, SDK 那些按推荐下最新的就好了。
现在大学课本可能还是老掉牙的 Eclipse 环境,本人是强烈不推荐的。因为它,不!好!用!
如果有学弟学妹们的老师们指定 Eclipse ,需要自己转一下啦。
Demo功能: 注册身份证信息;查询历史注册信息。
二、代码结构
|-- main
| |-- AndroidManifest.xml
| |-- aidl
| | `-- com
| | `-- xzzb
| | `-- idcard_system
| | `-- aidl
| | `-- IRegisterCallback.aidl
| |-- java
| | `-- com
| | `-- xzzb
| | `-- idcard_system
| | |-- adapter
| | | `-- InfoAdapter.java
| | |-- data
| | | |-- PersonIdCard.java
| | | `-- PublicData.java
| | |-- database
| | | `-- Sqlite.java
| | |-- service
| | | `-- IdCardSystemService.java
| | |-- ui
| | | |-- MainActivity.java
| | | |-- PersonInformation.java
| | | |-- RecorderActivity.java
| | | |-- RegisterActivity.java
| | | `-- Welcome.java
| | `-- utils
| | `-- Utils.java
1.模块关系
2.模块部分代码
1> App启动会通过 AndroidManifest.xml 的配置找到首页。
<activity android:name=".ui.Welcome">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2> Welcome界面效仿其他应用一样,启动时延迟 1.5s 显示首页,用于启动 Service 和 加载数据库,然后进入可操作首页。
....
TimerTask t = new TimerTask() {
@Override
public void run() {
next();
}
};
//延时跳转
Timer time=new Timer();
time.schedule(t, 1500);
}//
private void next(){
Log.i(TAG, "next");
Intent intentOne = new Intent(this, IdCardSystemService.class);
startService(intentOne);
Intent in=new Intent(getApplicationContext(),MainActivity.class);
startActivity(in);
finish();
}
3> 启动 Service,读取数据库内容。
private Sqlite database;
private SQLiteDatabase db;
{
...
db = this.openOrCreateDatabase("idcard_system",MODE_PRIVATE,null);//判断数据库是否存在不存在就创建
database = new Sqlite(this,"idcard_system",null,1);
if(!database.findTable("idcard_system")){
String sql = "create table idcard_system(name, sex, nation, idCard, address, date)";
db.execSQL(sql);
}else{
String sql="select * from idcard_system";
ArrayList<PersonIdCard> ls = new ArrayList<>();
Cursor cursor=db.rawQuery(sql, null);
while (cursor.moveToNext()){
PersonIdCard person = new PersonIdCard();
person.setName(cursor.getString(cursor.getColumnIndex("name")));
person.setSex(cursor.getString(cursor.getColumnIndex("sex")));
person.setNation(cursor.getString(cursor.getColumnIndex("nation")));
person.setIdCard(cursor.getString(cursor.getColumnIndex("idCard")));
person.setAddress(cursor.getString(cursor.getColumnIndex("address")));
person.setDate_of_birth(cursor.getString(cursor.getColumnIndex("date")));
ls.add(person);
}
4> MainActivity 界面有两个 Button,分别打开注册界面和历史注册信息界面。下面主要看注册界面 RegisterActivity。
该界面中有 EditText 文本编辑框、RadioButton 单选框等操作,如果还不了解,百度自搜哈~
5、6、7> 将所有的信息填好后点击注册按钮,会调接口到 Service 进行信息合法化检测,
如果信息都正常则保存至 sql 数据库中,通知RegisterActivity 保存成功;
如果信息不合规,报错至 RegisterActivity。
public int checkInformation(PersonIdCard personIdCard) {
Log.i(TAG,"checkInformation");
dumpInfo(personIdCard);
Utils.Return err = Utils.checkInfo(personIdCard);
if (err == Utils.Return.CHECK_OK) {
saveDataToSql(personIdCard);
try {
callback.onPersonInfoSaveSuccess();
} catch (RemoteException e) {
e.printStackTrace();
}
} else {
try {
callback.onPersonInfoSaveFailed(err.ordinal());
} catch (RemoteException e) {
e.printStackTrace();
}
}
return 0;
}
8> 这里 RegisterActivity 继承了一个 aidl 接口,如果大家以后工作是 Android 开发,那么 aidl、hidl 这些跨进程通信就一定要学会,这里算是大学学不到需要扩展的知识。
另外,aidl 属于跨进程通信,本 Demo 没有和其他进程有交互,所以仅仅是进程自己的Activity 和 Service 的一种通信,相当于 interface 接口回调。(再次强调,aidl 是跨进程通信,虽然等同 Interface 接口回调,这里知识扩展知识,以后千万别这样用)
private IRegisterCallback registerCallback = new IRegisterCallback() {
@Override
public IBinder asBinder() {
return null;
}
@Override
public void onPersonInfoSaveSuccess() throws RemoteException {
}
@Override
public void onPersonInfoSaveFailed(int err) throws RemoteException {
Log.i(TAG, "onPersonInfoSaveFailed: err " + err);
}
};
4、9、10> 该路只是一个信息显示,并没有什么太多内容,请大家自己查阅。
简单说一下 InfoAdapter,它继承了BaseAdapter,配合ListView使用。将你想显示的东西以列表视图形式展现出来,类似音乐APP的播放列表。
最后在说一下PublicData 这个类,它是存放公共数据的地方,包括APK 启动时从数据库取到的数据,还是新添加的,都会经过它。
import android.app.Application;
import java.util.ArrayList;
public class PublicData extends Application {
private ArrayList<PersonIdCard> personList = new ArrayList<>();
public void setPersonList(ArrayList<PersonIdCard> personList) {
this.personList = personList;
}
public ArrayList<PersonIdCard> getPersonList() {
return personList;
}
public void add(PersonIdCard personIdCard) {
personList.add(personIdCard);
}
}
总结
很简单的一个注册表小样,但是里面知识比较杂,划分也细。希望可以帮到学弟学妹们。
工程文件压缩包我放到百度云上了:
链接地址,提取码 :vhih