Android Studio实现志愿者系统

Posted 振华OPPO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio实现志愿者系统相关的知识,希望对你有一定的参考价值。

项目目录

一、项目概述

本系统采用MVC架构设计,SQLite数据表有用户表、成员表和活动表,有十多个Activity页面。打开应用,进入欢迎界面,3s后跳转登录界面,用户先注册账号,登录成功后进入主界面。主界面可以查看我的活动,修改和删除活动,还能发布活动。可以添加和删除成员、还能查看我的成员信息。可以查看和修改个人信息。底部导航栏和顶部菜单栏,菜单栏可以打开背景音乐、查询位置和查询时间。应用还制作了钟表显示的小组件,功能非常丰富。

二、主要技术

主要应用的技术如下:

Fragment碎片Service后台服务SharedPreferencesMediaPlayer
HandlerSQLiteDatabaseBundleRecyclerView
Thread多线程Menu菜单栏百度地图Widget组件开发

本项目知识点还是很多的,涉及到Service后台服务,百度地图定位功能,Widget桌面组件开发等。

三、开发环境

开发环境依旧是在android Studio4.2.1,只要你的AS是近两年从官网下载的,都是可以满足的。日期版本是比4.2.1高的。

四、详细设计

1、基础Activity

首先,讲下欢迎、注册和登录,这三者作为App不可或缺的内容,同时也是逻辑细节和UI设计最需要注意的地方,做完容易,做好不容易。做过这么多应用了,不同样式的登录界面也接触了20来种。本次注册登录还是很喜欢的风格,很丰富的提示信息,保证账号的唯一性。记住密码,方便用户,注册完也连带账号和密码一起传回来。Layout的Code过于简单,看下Design视图。

再来讲MainActivity,奠定应用基调的Activity,至关重要,你要将应用的所有功能呈现在这里,底部导航栏采用BottomNavigationView,顶部Menu菜单栏、导航栏以及主体部分都是系统功能。按钮都设置了渐变色的background,按下变色。导航栏有图标,后面的各个输入框都有图标。


MainActivity的代码很多,因为它负责了后台音乐、位置查询、活动的查看修改删除发布等页面跳转,查看删除添加成员的跳转,以及个人信息的修改等。这里就一起看下导航栏的监听器吧,和Onclick方法很相似,只能说接口方法好像都如此。

// 底部导航栏监听器
  bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() 
      @Override
      public boolean onNavigationItemSelected(MenuItem item) 
          switch (item.getItemId()) 
              case R.id.my_member:
                  Intent intentMember = new Intent(MainActivity.this, ViewMember.class);
                  startActivity(intentMember);
                  return true;
              case R.id.release_activity:
                  Intent intentActivity = new Intent(MainActivity.this, ReleaseActivity.class);
                  startActivity(intentActivity);
                  return true;
              case R.id.personal_information:
                  Intent intentPersonal = new Intent(MainActivity.this, PersonalActivity.class);
                  startActivity(intentPersonal);
                  return true;
          
          return false;
      
  );

2、活动信息

先看下Activity的Bean类的属性and方法。

// 我的活动实体类
public class MyActivity 
    private String name;
    private String number;
    private String beginDate;
    private String endDate;
    public MyActivity() 

    

    public MyActivity(String name, String number, String beginDate, String endDate) 
        this.name = name;
        this.number = number;
        this.beginDate = beginDate;
        this.endDate = endDate;
    

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public String getNumber() 
        return number;
    

    public void setNumber(String number) 
        this.number = number;
    

   public String getBeginDate() 
        return beginDate;
   

   public void setBeginDate() 
        this.beginDate = beginDate;
   

   public String getEndDate() 
        return endDate;
   

   public void setEndDate() 
        this.endDate = endDate;
   


再来看下数据库中Activity表,你会发现数据表的字段名就是Bean的属性名。

   // 活动表建表语句
   public static final String CREATE_MYACTIVITY = "create table MyActivity (" +
           "name varchar(20) primary key," +
           "number varchar(20)," +
           "beginDate varchar(20)," +
           "endDate varchar(20))";

建立好表后,在ActivityDao中写好对活动表的增删改查方法吧,后面只需要创建ActivityDao对象就可以操作活动表了,不需要每次都写一遍。

	// 添加我的活动
    public void insertMyActivity(MyActivity myActivity) 
        // 创建ContentValues对象
        ContentValues values = new ContentValues();
        // 向该对象中插入键值对
        values.put("name", myActivity.getName());
        values.put("number", myActivity.getNumber());
        values.put("beginDate", myActivity.getBeginDate());
        values.put("endDate", myActivity.getEndDate());
        // 通过insert()方法插入数据
        sqLiteDatabase.insert(MyDBOpenHelper.TABLE_MYACTIVITY, null, values);
    
    // 删除我的活动
    public void deleteMyActivity(MyActivity myActivity) 
        sqLiteDatabase.delete(MyDBOpenHelper.TABLE_MYACTIVITY, "name = ?", new String[]myActivity.getName());
    
    // 修改我的活动
    public void updateMyActivity(MyActivity myActivity) 
        ContentValues values = new ContentValues();
        values.put("name", myActivity.getName());
        values.put("number", myActivity.getNumber());
        values.put("beginDate", myActivity.getBeginDate());
        values.put("endDate", myActivity.getEndDate());
        sqLiteDatabase.update(MyDBOpenHelper.TABLE_MYACTIVITY, values, "name = ?", new String[]myActivity.getName());
    
    // 查询我的活动
    public ArrayList<MyActivity> queryMyActivity() 
        ArrayList<MyActivity> arrayList = new ArrayList<>();
        Cursor cursor = sqLiteDatabase.query(MyDBOpenHelper.TABLE_MYACTIVITY, null, null, null, null, null, null);
        if (cursor.moveToFirst()) 
            do 
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String number = cursor.getString(cursor.getColumnIndex("number"));
                String beginDate = cursor.getString(cursor.getColumnIndex("beginDate"));
                String endDate = cursor.getString(cursor.getColumnIndex("endDate"));
                MyActivity myActivity = new MyActivity(name, number, beginDate, endDate);
                arrayList.add(myActivity);
             while (cursor.moveToNext());
        
        cursor.close();
        return arrayList;
    
    // 根据名称查询我的活动
    public MyActivity queryByName(String activityName) 
        Cursor cursor = sqLiteDatabase.query(MyDBOpenHelper.TABLE_MYACTIVITY, null, null, null, null, null, null);
        if (cursor.moveToFirst()) 
            do 
                // 遍历Cursor对象,取出数据比对
                String name = cursor.getString(cursor.getColumnIndex("name"));
                if (activityName.equals(name)) 
                    String number = cursor.getString(cursor.getColumnIndex("number"));
                    String beginDate = cursor.getString(cursor.getColumnIndex("beginDate"));
                    String endDate = cursor.getString(cursor.getColumnIndex("endDate"));
                    MyActivity myActivity = new MyActivity(name, number, beginDate, endDate);
                    cursor.close();
                    return myActivity;
                
             while (cursor.moveToNext());
        
        cursor.close();
        return null;
    

3、成员信息

先来看下成员类的属性和方法:

// 成员实体类
public class Member 
    private String id;
    private String name;
    private String age;
    private String phone;

    public Member() 

    

    public Member(String id, String name, String age, String phone) 
        this.id = id;
        this.name = name;
        this.age = age;
        this.phone = phone;
    

    public String getId() 
        return id;
    

    public void setId(String id) 
        this.id = id;
    

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public String getAge() 
        return age;
    

    public void setAge(String age) 
        this.age = age;
    

    public String getPhone() 
        return phone;
    

    public void setPhone(String phone) 
        this.phone = phone;
    


再写建表语句,SQL语法熟练的话,这些都是基操了,没什么内容。

    // 成员表建表语句
    public static final String CREATE_MEMBER = "create table Member (" +
            "id varchar(20) primary key," +
            "name varchar(20)," +
            "age varchar(20)," +
            "phone varchar(20))";

最后,还是写MemberDao,对用户表的增删改查封装好。

	// 添加我的成员
    public void insertMember(Member member) 
        // 创建ContentValues对象
        ContentValues values = new ContentValues();
        // 向该对象中插入键值对
        values.put("id", member.getId());
        values.put("name", member.getName());
        values.put("age", member.getAge());
        values.put("phone", member.getPhone());
        // 通过insert()方法插入数据
        sqLiteDatabase.insert(MyDBOpenHelper.TABLE_MEMBER, null, values);
    
    // 删除我的成员
    public void deleteMember(Member member) 
        sqLiteDatabase.delete(MyDBOpenHelper.TABLE_MEMBER, "id = ?", new String[]member.getId());
    
    // 修改我的成员
    public void updateMember(Member member) 
        ContentValues values = new ContentValues();
        values.put("id", member.getId());
        values.put("name", member.getName());
        values.put("age", member.getAge());
        values.put("phone", member.getPhone());
        sqLiteDatabase.update(MyDBOpenHelper.TABLE_MEMBER, values, "id = ?", new String[]member.getId());
    
    // 查询我的成员
    public ArrayList<Member> queryMember() 
        ArrayList<Member> arrayList = new ArrayList<>();
        Cursor cursor = sqLiteDatabase.query(MyDBOpenHelper.TABLE_MEMBER, null, null, null, null, null, null);
        if (cursor.moveToFirst()) 
            do 
                String id = cursor.getString(cursor.getColumnIndex("id"));
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String age = cursor.getString(cursor.getColumnIndex("age"));
                String phone = cursor.getString(cursor.getColumnIndex("phone"));
                Member member = new Member(id, name, age, phone);
                arrayList.add(member);
             while (cursor.moveToNext());
        
        cursor.close();
        return arrayList;
    
    // 根据编号查询成员
    public Member queryById(String memberId) 
        Cursor cursor = sqLiteDatabase.query(MyDBOpenHelper.TABLE_MEMBER, null, null, null, null, null, null);
        if (cursor.moveToFirst()) 
            do 
                // 遍历Cursor对象,取出数据比对
                String id = cursor.getString(cursor.getColumnIndex("id"));
                if (memberId.equals(id)) 
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                    String age = cursor.getString(cursor.getColumnIndex("age"));
                    String phone = cursor.getString(cursor.getColumnIndex("phone"));
                    Member member = new Member(id, name, age, phone);
                    cursor.close();
                    return member;
                
             while (cursor.moveToNext());
        
        cursor.close();
        return null;
   

以上是关于Android Studio实现志愿者系统的主要内容,如果未能解决你的问题,请参考以下文章

ANDROID STUDIO - 如何将标记添加到当前位置?

Android studio 不检查 mFusedLocationProviderClient.getLastLocation().addOnSuccessListener 并返回当前位置 null

通过单击android studio中的按钮将我的当前位置发送给所有用户

如何使用 android studio 更改 Google 地图中“我的位置”按钮的位置

如何获取当前位置并将其与其他 lolation 或几乎关于 android studio 中的第二个位置进行比较

Android Studio实现考试管理系统