软件编程
位置:首页>> 软件编程>> Android编程>> Android实现志愿者系统详细步骤与代码

Android实现志愿者系统详细步骤与代码

作者:振华OPPO  发布时间:2022-01-08 22:41:42 

标签:Android,志愿者

一、项目概述

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

二、主要技术

主要应用的技术如下:

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

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

三、开发环境

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

Android实现志愿者系统详细步骤与代码

四、详细设计

1、基础Activity

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

Android实现志愿者系统详细步骤与代码

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

Android实现志愿者系统详细步骤与代码

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;
   }

Android实现志愿者系统详细步骤与代码

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实现志愿者系统详细步骤与代码

4、百度地图

首先来看下我引入百度地图定位功能的过程。创建libs文件夹,然后拖拽BaiduLBS的jar包进去,然后Add as Library即可。

Android实现志愿者系统详细步骤与代码

在AndroidManifest.xml中添加上meta-data标签和Service标签,一个是api_key,还有一个是location的服务。

<meta-data
           android:name="com.baidu.lbsapi.API_KEY"
           android:value="@string/api_key" />
       <service
           android:name="com.baidu.location.f"
           android:enabled="true"
           android:process=":remote" />

在MapActivity中定义并配置地图的参数信息,然后初始化当前位置并显示,因为模拟器的经纬度信息是不通过网络或者GPS获取的,所以绝大多数时候是不能用来使用百度地图的,我们的坐标也都是手动输入显示即可,想使用还是要用真机,况且大家也不是做什么科研项目,不需要到室外定位。

mapView = findViewById(R.id.map_view);
       baiduMap = mapView.getMap();// 获取到地图
       baiduMap.setMyLocationEnabled(true);
       initMap();     // 设置地图放大的倍数
       configureMap();// 设置定位的参数
       initLocation();// 初始化位置

5、Widget组件

Widget组件是最近才学习的内容,发现平时手机应用对Widget用的很少,不过作为Android开发的知识,有就了解一下不是坏事。为系统制作了一个日期显示的Widget桌面组件,可以在活动列表中拖到模拟器桌面上。后面运行时候会演示打开组件的方法。

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
   android:initialKeyguardLayout="@layout/my_app_widget"
   android:initialLayout="@layout/my_app_widget"
   android:minWidth="150dp"
   android:minHeight="100dp"
   android:previewImage="@drawable/example_appwidget_preview"
   android:resizeMode="horizontal|vertical"
   android:updatePeriodMillis="86400000"
   android:widgetCategory="home_screen"></appwidget-provider>

长按桌面,跳出小组件,然后选择志愿者系统的组件,拖拽到桌面上即可。

Android实现志愿者系统详细步骤与代码

五、运行演示

视频链接

Android Studio实现志愿者系统

来源:https://blog.csdn.net/qq_42257666/article/details/128511138

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com