这是一个简单的应用程序,实现的功能就是:你填写一些必要信息,比方说姓名和学号,然后点击签到按钮,就把你的信息收录数据库;当然你可以替别人请假,所以设置了请假按钮;为了方便查看有那些人已经签到了或是请假了,你可以查看出勤表,也就是读取数据库信息。这就是一个简单签到应用。

经过这几天的学习,对Android有一个大致的了解了,但是还是有很多局限性,所以想到练练手。不过这个程序也写了很久,从昨晚开始写,到今天中午才调试完成功能,还是破费心血的,不过,弄出来了,还是值得开心的。

首先说下思路。我做这个出于几方面考虑,一是要界面设计,二是有多个Activity设计,三是有数据库的数据存储。

从这三点来看,也可以看出我的设计思路,也就是按这三步来做的。首先把最基本的两个layout设计好,把button和edittext和listview弄好,这里面有一点很特别,就是listview,因为签到涉及的到内容比较多,比方说我这里面就有四点:id,name,code,status。id不用说了,数据库里的,大家都懂。name就是保存的姓名内容。code就是保存的学号内容。status就是你是签到,还是请假这两个状态。说到这里,那么listview就还要设计一个layout,就是listview的每条都有这四个内容,这四个内容就是简单的textview组成的,不知道你懂了没。

界面设计好了,就到Activity了,这里肯定有两个Activity的,因为主界面是签到那个Activity,然后你的出勤表是第二个Activity,你进入第二个Activity是通过第一个界面上的出勤表button进去的,我也设计了一个back在第二个Activity上,也就是返回第一个界面。当然,其实第一个Activity我还加入了menu功能,就是退出。第二个Activity是关键,因为它是读取数据库信息,然后把它显示出来。

从第二个Activity的onCreate开始,然后就是要对数据库进行操作了。其实这里面只有简单的一些数据库操作,首先是建立数据库,直接写一个类继承官方提供的SQLiteOpenHelper这个帮助类,然后添加他提供的创建和更新数据库的方法就可以了。然后是插值,怎么把你签到活请假的信息插入到数据库里面。首先关键是插值,直接用你写的类创建一个实例,操作方法就是insert,不过有格式,就是用values的方法,把你的每一个都当着string传给数据库里面的每条的变量名下。从这里,也就可以知道你要怎么做,也就是你要插入的值都是string,所以你edittext直接获取,转化为string类型,然后通过values插进去就可以了,这里还有一个status,它是通过你选择不同的button来插入的,要注意下。至于id的增加,其实很简单,我这里就设置了一个私有成员变量number,然后从1开始增加,每插入一条,就让number增加一次就可以了。

最关键的是怎么把数据库的每一条读出来,然后传给listview,这里面要用的adapter和list这两个概念。adapter是适配器,就是你设计一系列的数据链,然后通过这个适配器,绑定在listview上,这样你set这个view就可以看到你的这些数据。操作的时候有要注意的地方,就是我这里用到的就是常用的SimpleAdapter()操作方法,这个方法有五个参数,第一个是当前上下文,这个很好理解;第二个是layout,其实就是你设计的listview怎么布局的,比方说我刚才说了,我的要显示四个textview,也就是数据库的四个变量,所以就把你设计的那个layout.xml名字传过来就可以了;第三个是一个list,就是数据链,这个待会再说;第四个和第五个是配对的,一个是from一个是to,复杂的说就是你读取你数据库里面那些数据,这些数据的名字就放在from这个字符串数组里面,而to这个int型数组则是你把你从from里面读取的数据要放到哪里去,也就是显示在哪里,当然是显示在listview里面啦,但是具体在哪里,当然是textview咯。所以我的赋值是这样的,应该能懂。

String[] fromColumns = new String[] {"id","name","code","status"};
SimpleAdapter adapter = new SimpleAdapter(Attendance.this,listItem,R.layout.listview,fromColumns,new int[] {R.id.textview01,R.id.textview02,R.id.textview03,R.id.textview04});

在最后说那个list吧。这个list是什么意思呢?其实它就是一个链表,它把我所有要显示的数据都存在这个表里面了,然后我直接读这个表就可以了。可想而知,这个表肯定是从数据库里面产生的,的确,那么它是怎么从数据库把数据拷贝到自己的表中呢?其实,我这里就设计了两个list,一个是idlist就是只有id也就是1,2,3、、、之类的,另一个才是所有数据的list,我读取每个idlist里面的值,然后把他传给这个字符串的list,然后把这个字符串的list传给adapter就可以显示出来了。这里面有一个HashMap<String,Object>要特别说一下,这个就是建立这个字符串list的方法,他第一个变量是key就是我们的id之类的,后面的Object是随便类型的数据,我这里都是字符串。

源代码:

主界面的Activity程序。

package com.example.attendance;import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.view.*;
import android.widget.*;public class MainActivity extends Activity {private int number=1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//签到按键操作Button qdbutton = (Button)findViewById(R.id.button1);qdbutton.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//取得editEditText evname = (EditText)findViewById(R.id.edit1);String strname = evname.getText().toString();EditText evcode = (EditText)findViewById(R.id.edit2);String strcode = evcode.getText().toString();//保存信息到数据库Mysql mysql = new Mysql(MainActivity.this, "mydb", null, 1);SQLiteDatabase db = mysql.getWritableDatabase();ContentValues values = new ContentValues();values.put("id", number++);values.put("name", strname);values.put("code", strcode);values.put("status", "attend");db.insert("message", null, values);db.close();//显示签到成功Toast.makeText(MainActivity.this, "签到成功",Toast.LENGTH_SHORT).show();}});//请假按键操作Button qjbutton = (Button)findViewById(R.id.button2);qjbutton.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//取得editEditText evname = (EditText)findViewById(R.id.edit1);String strname = evname.getText().toString();EditText evcode = (EditText)findViewById(R.id.edit2);String strcode = evcode.getText().toString();//保存信息到数据库Mysql mysql = new Mysql(MainActivity.this, "mydb", null, 1);SQLiteDatabase db = mysql.getWritableDatabase();ContentValues values = new ContentValues();values.put("id", number++);values.put("name", strname);values.put("code", strcode);values.put("status", "leave");db.insert("message", null, values);db.close();//显示准许请假Toast.makeText(MainActivity.this, "准许请假",Toast.LENGTH_SHORT).show();}});//显示按键操作Button xsbutton = (Button)findViewById(R.id.button3);xsbutton.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//显示数据库信息Intent intent = new Intent();intent.setClass(MainActivity.this, Attendance.class);startActivity(intent);finish();}});}//菜单显示:退出、关于@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubif(item.getItemId()==R.id.item1){//退出finish();//onDestroy();}else if(item.getItemId()==R.id.item2){//弹出对话框AlertDialog.Builder builder = new AlertDialog.Builder(this);LayoutInflater li = this.getLayoutInflater();View view =li.inflate(R.layout.dialog, null);builder.setTitle("关于");builder.setIcon(R.drawable.ic_launcher);builder.setView(view);builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubdialog.cancel();}}).create().show();         }return super.onOptionsItemSelected(item);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

把数据库内容显示在listview这个Activity里面的代码。

package com.example.attendance;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;public class Attendance extends ListActivity {HashMap<String,Object> map;ArrayList<String> idList = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.attendance);//显示数据库信息Mysql mysql = new Mysql(Attendance.this, "mydb", null, 1);SQLiteDatabase db = mysql.getWritableDatabase();List<HashMap<String,Object>> listItem = new ArrayList<HashMap<String,Object>>();//创建ListViewCursor cursor = db.rawQuery("select * from message", null);while(cursor.moveToNext()){  //循环取出cursor中的数据,并判断下一个下标是否有内容String id = cursor.getString(cursor.getColumnIndex("id"));//取出cursor中的IDString name = cursor.getString(cursor.getColumnIndex("name")); //取出cursor中的NAMEString code = cursor.getString(cursor.getColumnIndex("code")); //取出cursor中的CODEString status = cursor.getString(cursor.getColumnIndex("status"));//取出cursor中的STATUSidList.add(id);map = new HashMap<String,Object>(); map.put("id", id);map.put("name", name);map.put("code",code);map.put("status", status);listItem.add(map);}ListView lv = (ListView)findViewById(android.R.id.list);String[] fromColumns = new String[] {"id","name","code","status"};SimpleAdapter adapter = new SimpleAdapter(Attendance.this,listItem,R.layout.listview,fromColumns,new int[] {R.id.textview01,R.id.textview02,R.id.textview03,R.id.textview04});lv.setAdapter(adapter);  cursor.close();//返回按键操作Button fhbutton = (Button)findViewById(R.id.backbutton);fhbutton.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent();intent.setClass(Attendance.this, MainActivity.class);startActivity(intent);finish();}});                    }}

至于创建数据库那个java文件和一些设计界面的xml文件就步贴了,没什么技术含量。

运行效果截图:

初始进入界面

黄平要签到,提示签到成功

查看出勤表,黄平已经在数据库里面



签到app--Android练手相关推荐

  1. Android 练手完整项目app(二)Banner+多布局RecyclerView列表

    更新第二弹,主要内容HomeFragment页面设计Banner+RecyclerView,多布局列表展示,页面xml较多,RecyclerView的适配器只写了3个多布局,后期可优化扩展. 1. 搭 ...

  2. Android练手小项目---仿凤凰新闻app

    kanfang_demo 仿凤凰新闻app-GitHub:https://github.com/RealMoMo/FengHuangNews 最重要的事情放前面说,请用wifi测试,最好下载凤凰新闻a ...

  3. Android练手小项目--仿72g赚吧App

    仿72g赚吧app 点击链接GitHub 开发目的: 1.项目框架搭建.抽取基类 2.主要:练习自定义View 3.练习动画 4.练习服务组件 预览界面

  4. android练手项目集锦

    哈哈一向的老传统,直接贴地址.话说现在各种开源项目不少,但是现在找几个优秀的还真不容易 awaker 一个挺不错的用来学习 AAC 框架的demo ,很详细的使用了 AAC 框架,代码封装的不错.个人 ...

  5. 别让双手闲下来,来做一些练手项目吧

    作者:Weston,原文链接,原文日期:2016-01-27 译者:saitjr:校对:Cee:定稿:千叶知风 自从我昨天发了文,收到的最多的评论就是: 我应该选择哪些 App 来练手呢? 这个问题很 ...

  6. Android股票app模拟同花顺,适合练手的Android项目

    本项目是一款Android股票app软件,模拟同花顺,高仿微信九宫格图片浏览和Activity滑动返回,使用Volley网络请求和MVP框架 ,PullToRefreshRecyclerView.自定 ...

  7. android 图片圆角 遮罩_Android 自定义View练手Demo(一)实现圆角遮罩效果

    Android 自定义View系列文章 Android自定义View实现圆角遮罩效果 一图胜千言,有一个遮罩就会凸显出重点区域 1-1.jpg 本文通过两种方式来实现这种效果,来达到自定义View练手 ...

  8. Android Studio 插件开发详解一:入门练手

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112003 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  9. Android添加手机黑名单,手机来电拦截实现详解与Demo,一个不错的练手项目,涵盖Android四大组件。

    简介 这是一个小应用的详解,这个应用可以添加手机黑名单,拦截手机黑名单的来电.通过这个小demo,我们可以对Android四大组件的应用场景有个具体的了解,可以说是一个不错的练手项目. 下面给出下载地 ...

  10. Python毕设-【课堂人脸签到系统】附源码课件/Python练手项目/Python毕业设计

    Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 文章目录 Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 系统简介 一.本课题拟解决的问题 二.系统技术栈 三.开发工具 四.数 ...

最新文章

  1. 计算广告学学习2 - 广告有效性模型
  2. 生日快乐程序_别@官方了!云开发教你制作个性头像小程序,以后过节想加啥就加啥!...
  3. pdf.js 利用HTML5技术显示pdf内容
  4. 谈谈HashMap线程不安全的体现
  5. 这个关系国计民生的“黑盒子” 我们造出来了
  6. 王者荣耀服务器未响应8月5日苹果,王者荣耀:世冠小组赛8月5日前瞻预测
  7. scara机器人dh参数表_两分钟带你了解机器人标定的因素
  8. iOS 推送通知及推送扩展
  9. MATLAB常见矩阵运算函数,矩阵的转置transpose()、求行列式值det()、求矩阵的秩rank()、求矩阵的特征值eig()、求逆矩阵inv()
  10. 新的边缘架构兴起,Serverless 的发展方向在哪?
  11. c++构造函数、析构函数为什么不能取地址
  12. 移动加权平均全月平均
  13. 5款最好用的免费3D建模软件(附下载链接)
  14. 外贸人写开发信会犯的错误,你中了哪几个
  15. 用js判断图片地址是否有效
  16. 制造业原材料价格上涨 安防设备涨还是不涨?
  17. 大数据早报:Firebase推出机器学习功能 英伟达大幅扩大深度学习学院规模(11.2)
  18. 记一次连接数据库报错The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zo
  19. 华为手机怎么变鸿蒙系统,刚公布,未来你的华为手机将迎来这些改变→
  20. SaaSBase:推荐一些超好用的RPA流程自动化软件(上篇)

热门文章

  1. linux 服务器查看公网出口ip
  2. Python:终端打印字体颜色
  3. Text-to-SQL模型----IRNet
  4. Oracle应用之分组函数之ROLLUP用法
  5. 计算机毕业设计Java智慧校园食堂点餐系统(源码+系统+mysql数据库+lw文档)
  6. (超级有用)ThinkPHP 5漏洞分析之SQL注入
  7. 如何理解站在CPU角度和站在NOR FLASH角度对NOR FLASH进行操作
  8. dreamweaver没有中文字体
  9. Canvas 画正n角星
  10. uniapp - [全端兼容] 音乐列表播放与切换歌曲,点击列表播放 mp3 wav 音乐文件(支持点击播放与暂停,图标切换 / 流畅的切换音频、暂停保留歌曲及恢复功能等详细教程)