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

经过这几天的学习,对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. [PHP] Phalcon操作示范
  2. 清华贵系的期末大作业:奋战三周,造台计算机!
  3. 二十四、死锁的处理策略---检测和解除
  4. AI如何在安防行业更加深入?可从超高清视频监控切入
  5. VS 断点无法调试学习总结
  6. nginx负载均衡的五种方式
  7. vba 数组赋值_VBA数组与字典解决方案第18讲:VBA中静态数组的定义及创建
  8. 2022年中国酒店业数字化转型趋势报告
  9. ThinkPHP5.0的访问路径随记
  10. 程序员吐槽:组里新来一个“加班狂”,可把大家害惨了
  11. Python中常用的内置方法
  12. 如何判断一个大佬值不值得跟随
  13. OpenCV:使用python-cv2实现Harr+Adaboost人脸识别
  14. problem c: 判断素数的函数_python100天 — Day 6 函数和模块的使用
  15. swiper vue 初始化方法_详解swiper在vue中的应用(以3.0为例)
  16. julia语言 python解释器_Julia官宣:为机器学习构建一种语言和编译器
  17. php转换大小写函数,149-PHP大小写转换函数
  18. 有什么好用的表单工具?
  19. 计算机学院元旦晚会对联,元旦的对联
  20. 如何提高在搜索引擎中的排名-百度排名-竞价排名-自然排名

热门文章

  1. 全网最全的权限系统设计方案(建议收藏
  2. hexo搭建博客图片不显示的坑
  3. 重庆市第11届职业院校技能大赛中职组“网络空间安全”试题解析(仅个人意见)
  4. 5G+VR/AR将重构我们的工作、生活方式
  5. 【MindStudio训练营第一季】MindX SDK情绪识别样例速跑 Atlas 200 DK版
  6. Redis系列:单机主从模式搭建
  7. 网络服务器根据应用层次,服务器按应用层次划分,一般分哪几种?
  8. 范数(norm)介绍
  9. 冶金行业数字化集采管理平台:加强冶金行业供应链协同发展,提升产业智慧化
  10. 开源OA办公平台搭建:流程开发中常见的正则表达式