项目目录
一、项目概述
二手交易系统使用了Android四大组件、Fragment、SQLite数据库、多线程和网络通信等技术。用户伴随着欢迎页面进入应用,然后注册和登录,可以记住密码,下次就无需输入。在首页可以看到学习、生活、体育和电子用品四大物品分类,点击可以查看每一类别的物品列表,单击物品列表进入物品详情页面,可以对物品进行评论和收藏。在发布页面可以上传自己闲置物品的信息,包括图片、类别、名称、详情、价格和自己的联系方式等,然后发布即可。在个人信息页面可以查看自己的闲置物品、自己收藏的物品以及自己的评论,在自己的物品和自己的收藏页面,依然可以单击进入物品详情页面。还可以查看软件版本和分享软件,点击每日名言可以推送名言警句的通知,最后可以利用广播机制退出登录。
本应用的通用逻辑就是:物品/评论的发布者可以对自己发布的物品/评论进行长按删除,但无法删除他人发布的物品/评论;并且当物品删除的同时,物品的所有收藏和所有评论也会一并删除,这符合正常逻辑。总之,二手交易系统覆盖了安卓所有基础知识点,在页面绘制上也采用了material设计,使用了精美图标,给予用户非常好的使用体验。
二、开发环境
三、详细设计
3.1、数据库设计
数据库设计决定了应用的功能逻辑,系统包含四张数据表:用户表、物品表、评论表和收藏表。每个用户可以发布多个物品,可以发表多个评论,还可以收藏多个物品,因此表之间都是多对多的关系。
创建数据库和数据表都讲过很多遍,也是安卓开发必备技能。建库建表后就要新建对数据表的操作类,比如UserDao、GoodsDao等。通过继承SQLiteOpenHelper类,读写数据库,定义对表格数据的增删改查方法。
// 数据库首次创建时创建数据表
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_USER);
db.execSQL(CREATE_TABLE_GOODS);
db.execSQL(CREATE_TABLE_COMMENT);
db.execSQL(CREATE_TABLE_SAVE);
}
3.2、网络通信
3.2.1、申请API KEY
注册和登录天行数据官网(https://www.tianapi.com/)。
搜索“励志古言”接口,然后申请该接口。
点击右上角控制台,然后在我的免费接口中查看接口的剩余次数。
在我的秘钥KEY中可以查看自己的API KEY
,将其复制粘贴到项目的HttpUtil.java
文件中的API_KEY
字符串中。
3.2.2、HTTP请求
创建一个简单的HTTP客户端工具类,可以用来向服务端发送HTTP请求并处理返回的响应。在代码中,sendOkHttpRequest
方法接受两个参数:一个是包含API URL的字符串address
,另一个是okhttp3.Callback
接口的实现类callback
,它定义了当请求完成时如何处理响应和错误。如果模拟器无网络,就会请求失败,直接返回,并作出提示。只要有网络,就会得到服务器返回的数据,之后调用parseShowData
方法解析数据。
/* 每日名言*/
private void showSaying() {
// 客户端向服务器发送Http的Get请求
HttpUtil.sendOkHttpRequest(HttpUtil.INDEX_URI, new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
// 如果模拟器无网络,就会请求失败,直接返回
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getContext(), "模拟器无网络", Toast.LENGTH_SHORT).show();
}
});
return;
}
@Override
public void onResponse(Call call, Response response) throws IOException {
// 如果api次数充足,得到服务器返回的具体内容
String result = response.body().string();
// 解析json字符串
parseShowData(result);
}
});
}
3.2.3、Gson解析
parseShowData
方法是设计来解析从天工励志古言API获取的JSON结果,并据此执行后续操作。该方法接收一个String
类型的参数result
,它代表了API返回的JSON格式的数据。
-
首先,使用Gson库将这个JSON字符串反序列化为
Saying
对象。这里Saying
是一个自定义的名言类,它有相应的字段和构造函数来映射JSON数据。 -
然后,通过
getActivity().runOnUiThread(new Runnable() {...}
方法确保后续的UI更新操作在主线程上执行。这是因为Android不允许在非主线程上直接操作UI组件。 -
在
Runnable
的run
方法内部,代码首先检查解析后的saying
对象是否为null
以及它的状态码是否为200。状态码200意味着API调用成功。如果这些条件中的任何一个不满足,就会弹出一个Toast
通知,告知用户"当前KEY不可用或API可用次数不足"。
如果解析成功,代码将继续执行,获取saying
对象中的ResultDTO
实例,并将其传递给sendNotification
方法,在应用内显示推送通知。
// 解析JSON字符串
private void parseShowData(String result) {
Saying saying = new Gson().fromJson(result, Saying.class);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
// 如果解析结果为null,或者结果码不为200,则当前key不可用或者API可用次数不足
if (saying == null || saying.getCode() != 200) {
Toast.makeText(getContext(), "当前KEY不可用或API可用次数不足", Toast.LENGTH_SHORT).show();
return;
}
Saying.ResultDTO resultDTO = saying.getResult();
sendNotification(resultDTO);
}
});
}
3.3、四大组件应用
- Activity:在欢迎、注册、登录、物品详情等活动中都用到了Activity跳转、传值等功能。
- Service:在
MyIntentService
类中的onHandleIntent(Intent intent)
中打印子线程的ID。 - ContentProvider:在
ContentProvider
类中重写了query
和getType
等方法,提供其他应用访问本应用数据库的接口。 - Broadcast:在
MineFragment
类中发送自定义广播,在BaseActivity
中定义和注册接收器接收广播,可以让当前登录用户强制下线。
四、运行演示
- 物品/评论的发布者可以对自己发布的物品/评论进行长按删除,但无法删除他人发布的物品/评论;并且当物品删除的同时,物品的所有收藏和所有评论也会一并删除,这符合正常逻辑。
- 上传的图片不宜过大,确保在
300KB
以下,否则因为模拟器内存不足无法渲染。 - 电脑上传图片到模拟器相册,只需要拖拽本地图片到模拟器中即可。
- 每日名言根据
详细设计
中的申请API KEY
替换秘钥,建议使用夜神模拟器
运行,能访问网络。
Android Studio实现二手交易系统
五、源码获取
1️⃣直接点击右侧链接下载源代码 | Android二手交易系统源码 |
---|---|
2️⃣直接点击右侧链接下载课设报告 | Android二手交易系统报告 |
3️⃣关注公众号 《 萌新加油站 》 | 后台回复:二手 |
🚀Android项目专栏有你错过的精彩内容 |
---|
Android Studio实现订餐系统 |
Android Studio实现考试管理系统 |
Android Studio实现图书馆订座系统 |
Android Studio实现学生信息管理系统 |
Android Stduio实现天气预报系统 |
为什么说其实取决于自己?那些断子绝孙的人,若不是因为今生作恶多端,就是由于前世恶行的报应。坦荡无私的上天,决不会苛待任何人。既然作恶已招致灾殃,修善自然就会获得福佑。比如老虎颈下的金铃,自己系上还要自己去解。又像寒潭之中的水冻结成冰,也一样可以融化为水。所以人的命运其实全由自己把握,并非取决于天意。