Android 身份注册系统

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值