日历签到

来源:互联网 发布:网络传输的结构形状 编辑:程序博客网 时间:2024/05/22 16:24

知识点:

  1. GridView的使用
  2. SQLite的使用

涉及文件:

  1. res->layout->activity_main.xml主布局文件
  2. res->layout->date.xml布局文件
  3. src->db->DBHelper.javajava文件
  4. src->db->SignDAO.javajava文件
  5. src->activity->MainActivity.javajava文件
activity_main.xml
[html] view plaincopyprint?
  1. <!-- 线性布局 -->  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_height="match_parent"  
  4.     android:layout_width="match_parent"  
  5.     android:orientation="vertical">  
  6.     <!-- 文本控件  
  7.         显示当前月份 -->  
  8.     <TextView   
  9.         android:id="@+id/show"  
  10.         android:gravity="center"  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="wrap_content"  
  13.         android:text="月份"/>  
  14.     <!-- 网格视图 
  15.      -->  
  16.     <GridView   
  17.         android:id="@+id/myDate"  
  18.         android:layout_width="match_parent"  
  19.         android:layout_height="355dp"  
  20.         android:numColumns="7"></GridView>  
  21.     <Button   
  22.         android:id="@+id/sign"  
  23.         android:layout_width="match_parent"  
  24.         android:layout_height="wrap_content"  
  25.         android:text="签到"/>  
  26. </LinearLayout>  

date.xml

[html] view plaincopyprint?
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="match_parent"  
  4.     android:orientation="vertical">  
  5.       
  6.     <TextView  
  7.         android:id="@+id/txtWeekDateMB"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_marginLeft="10dp"  
  11.         android:layout_marginTop="10dp"  
  12.         android:visibility="gone" />  
  13.   
  14.     <TextView  
  15.         android:id="@+id/txtDayDateMB"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         android:layout_marginLeft="10dp"  
  19.         android:layout_marginTop="10dp" />  
  20. </LinearLayout>  

MainActivity.java

[java] view plaincopyprint?
  1. public class MainActivity extends Activity {  
  2.     //Log标签  
  3.     private static final String TAG = "SIGN";  
  4.     //声明对象  
  5.     private Button sign;  
  6.     private TextView show;  
  7.     private GridView myDate;  
  8.     //获取本地时间  
  9.     Time nowTime = new Time();  
  10.     //一个月内的天数  
  11.     private int dayMaxNum;  
  12.     private int year,month,day,ym;  
  13.     private SignDAO sdao;  
  14.     //查询结果  
  15.     private List<String> list = new ArrayList<String>();  
  16.     private ArrayList<HashMap<String, Object>> sinalist,alisttmp;  
  17.     @SuppressLint("NewApi")  
  18.     @Override  
  19.     protected void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.activity_main);  
  22.         Log.i(TAG, "SIGN is onCreate");  
  23.           
  24.         //初始化对象  
  25.         init();  
  26.         //初始化数据库信息  
  27.         initdata();  
  28.           
  29.         myDate.setOnItemClickListener(new OnItemClickListener(){  
  30.   
  31.             @Override  
  32.             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  33.                     long arg3) {  
  34.                 //判断是否已经签到 从服务器获取签到信息  
  35.                 //模拟从本地数据库获取信息  
  36.                 if(day==arg2+1)//只能当天签到  
  37.                 {  
  38.                     sinalist = sdao.findSinInfo("zhangsan",year+"-"+month+"-"+(arg2+1),"0");  
  39.                     if(sinalist.size()>0)  
  40.                     {  
  41.                         Toast.makeText(getApplicationContext(), "已经签过到不能重复签到"200).show();  
  42.                         Log.d("""已签到");  
  43.                     }  
  44.                     else  
  45.                     {  
  46.                         //在数据库插入一条数据  
  47.                         sdao.insertSinInfo("zhangsan""张三", year+"-"+month+"-"+(arg2+1),year+""+month);  
  48.                         initdata();  
  49.                     }  
  50.                 }  
  51.                   
  52.             }  
  53.         });  
  54.     }  
  55.       
  56.     /** 
  57.      * @param   初始化对象 
  58.      */  
  59.     private void init(){  
  60.         sign = (Button)this.findViewById(R.id.sign);  
  61.         show = (TextView)this.findViewById(R.id.show);  
  62.         myDate = (GridView)this.findViewById(R.id.myDate);  
  63.         //取本地时间(时间应该从服务器获取)  
  64.         nowTime.setToNow();  
  65.         year = nowTime.year;  
  66.         month = nowTime.month+1;  
  67.         day = nowTime.monthDay;  
  68.         show.setText(year+"-"+month+"-"+day);  
  69.     }  
  70.   
  71.     /** 
  72.      * @param   初始化数据库信息 
  73.      */  
  74.     private void initdata(){  
  75.          sdao = new SignDAO(MainActivity.this);  
  76.          sdao.open();  
  77.          sinalist = sdao.findSinInfo("zhangsan","",year+""+month);//查询当月已签到的日期  
  78.          list.clear();  
  79.          dayMaxNum = getCurrentMonthDay();  
  80.          for(int i=0;i<dayMaxNum;i++)  
  81.             {  
  82.                 list.add(i, i+1+"");  
  83.             }  
  84.          myDate.setSelector(new ColorDrawable(Color.TRANSPARENT));  
  85.          myDate.setAdapter(new getDayNumAdapter(getApplicationContext()));  
  86.     }  
  87.       
  88.     class getDayNumAdapter extends BaseAdapter{  
  89.           
  90.         Context c;  
  91.         public getDayNumAdapter(Context c)  
  92.         {  
  93.             this.c = c;  
  94.         }  
  95.   
  96.         @Override  
  97.         public int getCount() {  
  98.             return list.size();  
  99.         }  
  100.   
  101.         @Override  
  102.         public Object getItem(int position) {  
  103.             return list.get(position);  
  104.         }  
  105.   
  106.         @Override  
  107.         public long getItemId(int arg0) {  
  108.             return 0;  
  109.         }  
  110.   
  111.         @Override  
  112.         public View getView(int position, View convertView, ViewGroup parent) {  
  113.             View v = LinearLayout.inflate(c, R.layout.date, null);  
  114.             TextView txtWeek = (TextView)v.findViewById(R.id.txtWeekDateMB);  
  115.             TextView txtDay = (TextView)v.findViewById(R.id.txtDayDateMB);  
  116.             switch (position)  
  117.             {  
  118.                 case 0:  
  119.                     txtWeek.setText("一");  
  120.                     break;  
  121.                 case 1:  
  122.                     txtWeek.setText("二");  
  123.                     break;  
  124.                 case 2:  
  125.                     txtWeek.setText("三");  
  126.                     break;  
  127.                 case 3:  
  128.                     txtWeek.setText("四");  
  129.                     break;  
  130.                 case 4:  
  131.                     txtWeek.setText("五");  
  132.                     break;  
  133.                 case 5:  
  134.                     txtWeek.setText("六");  
  135.                     break;  
  136.                 case 6:  
  137.                     txtWeek.setText("日");  
  138.                     break;  
  139.             }  
  140.             if(position<7)  
  141.             {  
  142.                 txtWeek.setVisibility(View.VISIBLE);  
  143.             }  
  144.             int lstDay = Integer.parseInt(list.get(position));  
  145.             //标记当前日期  
  146.             if(day==lstDay)  
  147.             {  
  148.                 txtDay.setText(list.get(position).toString());  
  149.                 txtDay.setTextColor(Color.RED);  
  150.             }else  
  151.                 txtDay.setText(list.get(position).toString());  
  152.             //标记已签到后的背景  
  153.             for(int i=0;i<sinalist.size();i++)  
  154.             {  
  155.                 String nowdate = sinalist.get(i).get("sindate").toString();  
  156.                 String[] nowdatearr = nowdate.split("-");  
  157.                 if(lstDay==Integer.parseInt(nowdatearr[2])){  
  158.                     txtDay.setBackgroundColor(Color.BLUE);  
  159.                     ++ym;  
  160.                 }  
  161.                 sign.setText("已经签到天数:"+ym);  
  162.             }  
  163.             return v;  
  164.         }  
  165.           
  166.     }  
  167.       
  168.       
  169.     //获取当月的 天数   
  170.     public  int getCurrentMonthDay() {    
  171.         Calendar a = Calendar.getInstance();    
  172.         a.set(Calendar.DATE, 1);    
  173.         a.roll(Calendar.DATE, -1);    
  174.         int maxDate = a.get(Calendar.DATE);    
  175.         return maxDate;    
  176.     }  
  177.       
  178.       
  179.       
  180.   
  181. }  
DBHelper.java
[java] view plaincopyprint?
  1. public class DBHelper extends SQLiteOpenHelper {  
  2.   
  3.     public DBHelper(Context context) {  
  4.         super(context, "sign.db"null1);  
  5.     }  
  6.   
  7.     /** 
  8.      * @param   创建表 
  9.      */  
  10.     @Override  
  11.     public void onCreate(SQLiteDatabase db) {  
  12.         String sql="create table sinTB(" +  
  13.                 "sin_id integer primary key autoincrement," +  
  14.                 "userid varchar(20)," +  
  15.                 "usernmae varchar(20)," +  
  16.                 "sindate varchar(20)," +  
  17.                 "yearmonth varchar(20)," +  
  18.                 "nowdate integer" +  
  19.                 ")";  
  20.         db.execSQL(sql);  
  21.     }  
  22.   
  23.     /** 
  24.      * @param   数据库版本更新时,会调用此方法 
  25.      */  
  26.     @Override  
  27.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  28.           
  29.     }  
  30.   
  31. }  
SignDAO.java
[java] view plaincopyprint?
  1. public class SignDAO {  
  2.     //声明对象  
  3.     Context context;  
  4.     SQLiteDatabase db;  
  5.     DBHelper dbHelper;  
  6.       
  7.     public SignDAO(Context context){  
  8.         this.context = context;  
  9.     }  
  10.       
  11.     /** 
  12.      * @param 打开数据库连接 
  13.      */  
  14.     public boolean open(){  
  15.         dbHelper = new DBHelper(context);  
  16.         db = dbHelper.getWritableDatabase();  
  17.         if(db == null){  
  18.             return false;  
  19.         }  
  20.         return true;  
  21.     }  
  22.       
  23.     /** 
  24.      * @param   关闭连接 
  25.      */  
  26.     public void close(){  
  27.         dbHelper.close();  
  28.     }  
  29.       
  30.     /** 
  31.      * @param   插入信息 
  32.      * @param uid 
  33.      * @param name 
  34.      * @param date 
  35.      * @param ym 
  36.      */  
  37.     public void insertSinInfo(String uid,String name,String date,String month){  
  38.         String sql="insert into sinTB(userid,usernmae,sindate,yearmonth,nowdate) values(?,?,?,?,?)";  
  39.         db.execSQL(sql,new Object[]{uid,name,date,month,System.currentTimeMillis()});  
  40.     }  
  41.       
  42.     /** 
  43.      * @param   查询信息 
  44.      * @param uid 
  45.      * @param date 
  46.      * @param ym 
  47.      * @return 
  48.      */  
  49.     public ArrayList<HashMap<String, Object>> findSinInfo(String uid,String date,String month){  
  50.         ArrayList<HashMap<String,Object>> alist = new ArrayList<HashMap<String,Object>>();  
  51.         alist.clear();  
  52.         HashMap<String, Object> rowMap;  
  53.         String sql;  
  54.         try{  
  55.             if("0".equals(month))  
  56.             {  
  57.                 sql="select * from sinTB where userid='"+uid+"' and sindate='"+date+"'";  
  58.             }  
  59.             else  
  60.             {  
  61.                 sql="select * from sinTB where userid='"+uid+"' and yearmonth='"+month+"'";  
  62.             }  
  63.             Cursor cur = db.rawQuery(sql, null);  
  64.             cur.moveToFirst();  
  65.             while(cur.moveToNext()){  
  66.                 rowMap = new HashMap<String, Object>();  
  67.                 rowMap.put("sin_id", cur.getInt(cur.getColumnIndex("sin_id")));  
  68.                 rowMap.put("userid", cur.getString(cur.getColumnIndex("userid")));  
  69.                 rowMap.put("usernmae", cur.getString(cur.getColumnIndex("usernmae")));  
  70.                 rowMap.put("sindate", cur.getString(cur.getColumnIndex("sindate")));  
  71.                 long aa = cur.getLong(cur.getColumnIndex("nowdate"));  
  72.                 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  73.                 Date now = new Date(aa);  
  74.                 String date1 = format.format(now);  
  75.                 rowMap.put("nowdate", date1);  
  76.                 Log.e("", cur.getString(cur.getColumnIndex("sindate")));  
  77.                 alist.add(rowMap);  
  78.             }  
  79.             return alist;  
  80.         }catch(Exception e){  
  81.             return alist;  
  82.         }  
  83.           
  84.     }  
  85. }  
0 0
原创粉丝点击