张晏齐,田 菲,杨 洁,杨树媛
(新疆农业大学 计算机与信息工程学院,新疆 乌鲁木齐 830052)
随着互联网技术的飞速发展和智能手机的广泛应用,APP作为基于Android平台开发的第三方应用,在智能手机的使用过程中扮演着越来越重要的角色。社团是大学生开展活动、认识新朋友的主要组织[1-3],但社团的繁杂性和随意性使得社团的管理并不顺利,虽然目前通过各种主流通信工具在一定程度上改善了此种状况,但随着“互联网+”的提出,是否能够实现一款专门将社团与互联网紧密结合,以社团服务为目的的APP成为了人们关注的焦点。因此,研究传统社团管理模式,利用互联网技术和Android技术结合传统社团管理模式和互联网技术的新型社团管理模式将成为现代社团管理的新方向[4,5]。
系统采用模块化设计方法,由社团展示、帖子管理和成员管理3个模块组成,权限用户包括社长、管理员和普通成员。系统功能模块如图1所示。
(1)社团展示模块。该模块主要实现社团介绍、社团展示、社团活动点赞、社团活动时间轴等功能,社团可通过这四个功能展示社团的各个方面,吸引新成员。
(2)成员管理模块。该模块主要实现申请入团、申请退团、分配职务、设置管理员、设置群组等功能,可对社团内成员进行有效管理联系。
(3)帖子管理。该模块主要实现管理员发帖、删帖、删回复和成员浏览帖子、帖子回复等功能,可以实时更新社团活动和意见反馈等信息。
在系统实现中,前台页面展示部分采用Java语言和XML语言以及Android Studio开发工具,后台采用Java语言,数据库采用SQLite。
图1 系统功能模块图
根据新农大社团管理APP的调研需求,进行数据库的逻辑设计,系统主要包含9个数据表:
(1)user(用户表):用于管理用户权限、角色信息。
(2)tb(社团表):用于管理各社团信息,如社团名、社团贴子数等。
(3)huifu(回复表):用于管理各帖子下回复的内容、所属帖子、回复人等信息。
(4)tiezi(帖子表):用于管理各社团的帖子主题、内容、发帖人、所属社团等信息。
(5)tieba_user(社团用户关系表):用于建立各社团与用户之间的关系。
(6)time (社团活动时间轴表):用于管理社团活动的日期、活动内容等信息。
(7)zhanshi(社团活动展示表):用于管理社团名、简介等信息。
(8)join_tb(申请入团表):用于建立申请者与申请社团之间的联系。
(9)quit_tb(申请退团表):功能同上。
1.3.1 界面设计
新农大社团管理APP的界面设计主要采用Android Studio自带的TextView,EditView,Button,Listview等布局,其中Listview在功能实现中起着重要作用。Listview是Android应用开发中常用的组件,其通过列表形式展示数据,具有较强的可扩展性,通常还会给每一项绑定一个点击时间,用于处理相应请求。该部分由item,适配器和数据三部分组成,根据适配器的不同可分为以下三类:
(1)ArrayAdapter。使用最为简单,以数据集合为基础,只显示一行文本。
(2)BaseAdapter。具有较好的扩种行,可自定义出各样式的布局。
(3)SimpleAdapter。可方便地将数据库中的内容通过列表形式展现出来。
本设计主要使用ArrayAdapter和继承BaseAdapter的自定义适配器,可根据需要灵活动态地展示所需内容。
本设计中使用适配器的主要步骤如下:
(1)确定Listview所显示的数据类型,根据不同的数据类型选择相应的适配器。
(2)如果显示的数据类型为单一的文本或列表,可使用固定的适配器,使用规定好的方法显示数据:
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, ls)
(3)若要求显示的数据多样,则可选择自定义适配器。自定义适配器继承BaseAdapter,在使用时需要重写:
@Override
public int getCount() {}
@Override
public Object getItem(int position) {}
@Override
public long getItemId(int position) {}
@Override
public View getView(int position, View convertView, final
ViewGroup parent) {}
在这四种方法中,最主要的是对第四种方法的重写,其是实现自定义适配器的关键部分。
(4)重写getView()方法需要确定添加在item中的元素,并将其逐一添加:
public View getView(int position, View convertView, final
ViewGroup parent)
{
database = s.openDatabase(mContext);
LayoutInflater inflater = LayoutInflater.from(mContext);
ViewHolder holder = null;
if (convertView == null)
{
convertView = inflater.inflate(R.layout.item_listview,
null);
holder = new ViewHolder();
holder.button = (Button) convertView.findViewById(R.id.
dianzan);
holder.count = (TextView) convertView.findViewById(R.id.
count);
holder.info = (TextView) convertView.findViewById(R.id.
info);
holder.shetuan = (TextView) convertView.findViewById(R.id.
shetuan);
holder.title = (TextView) convertView.findViewById(R.id.title);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.updateposition(position);
final ViewHolder finalHolder = holder;
holder.button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
count = finalHolder.bt(mContext,iid,count);
notifyDataSetChanged();
}
});
holder.title.setText(title.get(position));
holder.shetuan.setText(shetuan.get(position));
holder.info.setText(info.get(position));
holder.count.setText(count.get(position));
holder.button.setTag(position);
return convertView;
};
(5)当需要对item进行点击、长按等操作时可以在Java文件中定义:
//长按item响应事件
list View.set OnItemLong ClickListener(new
OnItemLong ClickListener()
{
@Override
public boolean onItemLongClick(final AdapterView<> parent,
View view, final
int
position, long id) {
AlertDialog.Builder builder = new AlertDialog.Builder(shetuan_
guanli.this);
builder.setTitle("选择以下操作")
.setItems(new String[]{"删除数据 "}, new
DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which) {
switch (which) {
case ACTION_DELETE:
//取出ls2中的id的值
String tiezi_id = ls2.get(position);
String a[] = {tiezi_id};
//在huifu表中删除帖子的回复
database.delete("huifu", "post_id=?", a);
//在tiezi表中删除这条信息
database.delete("tiezi", "id=?", a);
//查找tb表中的tz_num将其-1
String b[] = {String.valueOf(tbid)};
cursor = database.rawQuery("select * from tb where
id=?", b);
if (cursor.moveToFirst())
{
tznum = cursor.getInt(cursor.getColumnIndex("tz_num")) - 1;
}
//在tb表中修改tz_num
ContentValues values = new
ContentValues();values.put("tz_num", tznum);database.update("tb", values, "id
=?", b);
ls2.remove(parent);
mBaseAdapter.remove(position);
//调用适配器的删除方法break;
}
}
});
AlertDialog dialog = builder.create();
dialog.show();
return true;
}
})
1.3.2 服务器设计
部分服务器使用Java语言开发,其中网络通信使用HTTP协议。
超文本传输协议是互联网应用最广泛的一种网络协议。HTTP协议是客户端和服务器请求和应答的标准,采用了请求/响应模型。由客户端向服务器发送请求,包含请求的方法,URL,协议版本,请求修饰符,客户信息等。服务器以某状态行为响应,响应的内容包括消息协议版本,成功或错误编码,服务器信息,实体元信息以及可能的实体内容等。本项目考虑到安全性、数据长度及类型,采用POST请求。
数据交换格式采用JSON。JSON是一种轻量级数据交换格式,其键值对可同时传输多个数值,且方便区分使用。在本项目服务器与客户端交换数据过程中,有数组与列表的传输,通过JSON的传输方式可方便地交换较复杂的数据类型。
{"content":["说的真好","很期待啊 ","进入这个社团是正确的 "],
"username":["admin","admin","admin"],"id":["1","2","4"]}
1.3.3 结果展示
将社团信息和社团成员集中管理是本文研究的重点。社团信息管理可极大地凸显社团的优势,吸引成员加入;社团成员可对社团的发展现状有直观的了解。登录界面如图2所示,主界面如图3所示,群组展示界面如图4所示,社团展示界面如图5所示。
图3 主界面
图2 登录界面
图4 群组展示界面
图5 社团展示界面
本文设计并完成了基于Android的新农大社团管理APP,实现了各社团基本信息以及活动内容的管理与展示,同时实现了对社团成员基本信息、退团、入团、回复帖子等功能的管理,达到了社团管理简洁化的目的。
[1]滕佶祺,陈霖,钟谷朋,等.社团与活动系统的安全设计与实现[J].信息安全与技术,2017,8(6):26-29.
[2]李锦康.基于Android的智慧校园生活互动[J].通讯世界,2016 (9):280.
[3]李盼.高校学生社团的功能研究[D].重庆:西南大学,2016.
[4]胡月,王以宁,徐鹏,等.互联网时代教育类APP开发——美国《教育技术开发人员指南》手册解读及启示[J].中国电化教育,2015(12):41-48.
[5]常青.高校学生社团问题研究[D].长春:东北师范大学,2012.
[6]彭林,于国龙,宋敏,等.高校社团管理系统设计与实现[J].物联网技术,2017,7(2):113-114.
[7]陈振起.某高校社团管理系统设计与实现[D].厦门:厦门大学,2014.
[8]董彩华,梁敏健,郭振铭.高校社团管理系统的设计与实现[J].电脑与电信,2017(1-2):28-30.