安卓APP源码和设计报告——仿淘宝水果商城

news2024/11/15 7:26:59
  1. 项目名称
    仿淘宝水果商城
  2. 项目概述

随着互联网技术地高速发展,计算机进入到每一个人的生活里,从人们的生活方式到整个社会的运转都产生了巨大的变革,而在信息技术发达的今天,互联网的各种娱乐方式都在渗透到人们的生活方式之中,近年来人们生活水平的提高,生活压力的增加,精神生活的空虚,使人们对于精神世界的丰富需求越来越大,因此近年来,电视、电影、音乐等娱乐产业都在飞速发展,而音乐虽然是在人类历史上早就存在的娱乐方式,但在信息技术高速发展的现在,大部分产业都在实现互联网+的概念,而且随着全球数字娱乐业的发展,以及网络传播的快速、高效、便捷,传统的传播方式不能满足人们对于这方面的需求,所以许多传统的产业都在实现数字化。仿淘宝商城的产品展示系统是主要面对用户的产品信息展示,也是用户最终想寻找的信息内容。产品展示系统主要就是将仿淘宝商城中各类产品信息进行实时的发布,用户可以在首页清晰的浏览查询到各类产品信息,而且还提供强大的查询功能。

3、目的与要求

通过一个综合的实例,进一步掌握移动应用程序开发的基本原理和方法,提高基于Android Studio对图形用户界面的设计和开发能力,以及对控件事件处理、数据存储以及网络访问的能力。具体包括如下几个方面:

1)熟练掌握Android开发工具Android Studio的使用。

2)熟练掌握Android线性布局的使用方法,并熟练使用Activity、Fragment、ListView、TextView、Button、EditText、ImageView等视图组件构建具有良好用户体验的App界面。

3)熟练掌握对控件常用事件进行处理的方法。

4)掌握数据存储或网络访问的基本方法。

4、系统实现环境

集成开发环境:Android Studio 3.0及以上

JDK :1.8及以上

Android版本:9.0及以上

Android API:28及以上

5、系统设计与实现

本系统所包含的功能有用户登录、用户注册、首页、分类、发现、搜索等功能。用户登录及注册:初次使用本系统的用户需要注册用户名和密码,登录完成提示您已成功登录后,用户可进入首页浏览商品。首页、分类及发现:用户可以浏览商品,在首页可以搜索所需信息,分类页面有超市,大牌及常用分类。分别是一些日用品,奢侈品及各种电子产品。发现页面是一些水果店铺及水果分类。

登录页面主要代码

btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = et_username.getText().toString().trim();
String password = et_password.getText().toString().trim();
if (UIfEmpty.ifEmpty(username, password)) {
Toast.makeText(LoginActivity.this"信息未输入完整", Toast.LENGTH_SHORT).show();
else {
Cursor cursor = db.rawQuery("select username from user where username = ? and password = ?",
new String[]{username, password});
if (cursor.getCount() == 1) {
SharedPreferences.Editor editor = sp.edit();
if (cb_remember.isChecked()) {
editor.putString("username", username);
editor.putString("password", password);
editor.putBoolean("IFCHECK"true);
else {
editor.putBoolean("IFCHECK"false);
}
editor.commit();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
Toast.makeText(LoginActivity.this"登录成功", Toast.LENGTH_SHORT).show();
else {
Toast.makeText(LoginActivity.this"账号或密码错误", Toast.LENGTH_SHORT).show();
}
cursor.close();
}
}
});

注册页面的主要代码

protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
initViews();
btn_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
register();
}
});
btn_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
private void initViews() {
DBHelper helper = new DBHelper(this);
db = helper.getWritableDatabase();
btn_register = findViewById(R.id.register_btn_register);
btn_back = findViewById(R.id.register_btn_back);
et_username = findViewById(R.id.register_username);
et_password = findViewById(R.id.register_password);
et_repeat = findViewById(R.id.register_password_again);
}
private void register() {
String userName = et_username.getText().toString().trim();
String password = et_password.getText().toString().trim();
String passwordAgain = et_repeat.getText().toString().trim();
if (UIfEmpty.ifEmpty(userName, password, passwordAgain)) {
Toast.makeText(RegisterActivity.this"信息未输入完整", Toast.LENGTH_SHORT).show();
else {
if(password.equals(passwordAgain)) {
ContentValues values = new ContentValues();
values.put("username", userName);
values.put("password", password);
long flag = 0;
flag = db.insert("user"null, values);
if(flag == -1) {
Toast.makeText(RegisterActivity.this"账号已被注册", Toast.LENGTH_SHORT).show();
else {
Toast.makeText(RegisterActivity.this"注册成功", Toast.LENGTH_SHORT).show();
onBackPressed();
}
else {
Toast.makeText(RegisterActivity.this"两次输入的密码不一致", Toast.LENGTH_SHORT).show();
}
}
}
}

首页的主要代码

public View initView() {
View view = View.inflate(mContext, R.layout.fragment_homenull);
lv_home = view.findViewById(R.id.lv_home);
ib_top = view.findViewById(R.id.ib_top);
tv_search_home = view.findViewById(R.id.tv_search_home);
tv_message_home = view.findViewById(R.id.tv_message_home);
initListener();
return view;
}
public void initData() {
super.initData();
ArrayList<Goods> goods = new ArrayList<>();
goods.add(new Goods(2, R.drawable.lll"荔枝""海南", 25.00, 99, "水果店"));
goods.add(new Goods(3, R.drawable.computer"电脑""16英寸", 6599.00, 5, "Apple产品京东自营旗舰店"));
goods.add(new Goods(4, R.drawable.ppp"苹果""红富士", 10.00, 19, "华来水果店"));
goods.add(new Goods(5, R.drawable.xxx"香蕉""海南", 15.00, 18, "水果店"));
goods.add(new Goods(7, R.drawable.kouhong" 口红""正红色", 188.00, 1, "化妆品专营店"));
goods.add(new Goods(8, R.drawable.bamai8"跑车""轿车", 180000, 99999999, "BMW旗舰店"));
GoodsListAdapter adapter = new GoodsListAdapter(mContext, goods);
lv_home.setAdapter(adapter);
}

网络连接请求的主要代码
private void initListener() {
ib_top.setOnClickListener(v -> {
lv_home.smoothScrollToPosition(0);
});
tv_search_home.setOnClickListener(v -> {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.setData(Uri.parse("https://www.quanjing.com/feature/design/1517.html"));
startActivity(intent);
});
}

分类页面的主要代码

public View initView() {
View view = View.inflate(mContext, R.layout.type_homenull);
rg_type = view.findViewById(R.id.rg_type);
initFragment();
initListener();
rg_type.check(R.id.rb_commf1);
return view;
}

public void initData() {
super.initData();
}
private void initFragment() {
fragments new ArrayList<>();
fragments.add(new Jdtuijian()); //推荐分类
fragments.add(new JdShoping());
fragments.add(new Guoji());
}

private BaseFragment getFragment(int position) {
if (fragments != null && fragments.size() > 0) {
BaseFragment baseFragment = fragments.get(position);
return baseFragment;
}
return null;
}
private void switchFragment(Fragment fromfragment, BaseFragment nextfragment) {
if (tempFragment != nextfragment) {
tempFragment = nextfragment;
if (nextfragment != null) {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
if (!nextfragment.isAdded()) {
if (fromfragment != null) {
transaction.hide(fromfragment);
}
transaction.add(R.id.frameLayout_type, nextfragment).commit();
else {
if (fromfragment != null) {
transaction.hide(fromfragment);
}
transaction.show(nextfragment).commit();
}
}
}
}

分类页面中的超市主要代码

public class HomeAdapter2 extends BaseAdapter {
@Override
public int getCount() {
return imagenames2.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
tv_jd_commr1.setText("日用百货");
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.type_grid_item1null);
ImageView iv_icon = view.findViewById(R.id.ic_icon);
TextView tv_name = view.findViewById(R.id.tv_name);
tv_name.setText(imagenames2[position]);
iv_icon.setImageResource(ids2[position]);
return view;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}

分类页面中的推荐分类主要代码

public class HomeAdapter1 extends BaseAdapter {
@Override
public int getCount() {
return imagenames1.length;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
tv_jd_commr1.setText("常用分类");
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.type_grid_item1null);
ImageView iv_icon = (ImageView) view.findViewById(R.id.ic_icon);
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
tv_name.setText(imagenames1[position]);
iv_icon.setImageResource(ids1[position]);
return view;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}
}

分类页面中的大牌主要代码

public View initView() {
View view = View.inflate(mContext, R.layout.type_gridnull);
gridview_jd_r1 = view.findViewById(R.id.gridview_jd_r1);
tv_jd_commr1 = view.findViewById(R.id.tv_jd_commr1);
gridview_jd_r1.setAdapter(new HomeAdapter3());
return view;
}
public void initData() {
super.initData();
}
public class HomeAdapter3 extends BaseAdapter {
@Override
public int getCount() {
return imagenames3.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
tv_jd_commr1.setText("大牌区");
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.type_grid_item1null);
ImageView iv_icon = (ImageView) view.findViewById(R.id.ic_icon);
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
tv_name.setText(imagenames3[position]);
iv_icon.setImageResource(ids3[position]);
return view;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}
}

发现页面的主要代码

public class CommunityFragment extends BaseFragment {
private ListView shop_list;
@Override
public View initView() {
View view = View.inflate(mContext, R.layout.fragment_communitynull);
shop_list = view.findViewById(R.id.shop_list);
return view;
}
public void initData() {
super.initData();
ArrayList<Shop> shops = new ArrayList<>();
Goods s1_goods1 = new Goods(R.drawable.ppp"苹果", 10.00);
Goods s1_goods2 = new Goods(R.drawable.xxx"香蕉", 15.00);
Goods s1_goods3 = new Goods(R.drawable.lll"荔枝", 25.00);
shops.add(new Shop(R.drawable.mi"华来水果店", s1_goods1, s1_goods2, s1_goods3));

Goods s2_goods1 = new Goods(R.drawable.bao"菠萝", 56.00);
Goods s2_goods2 = new Goods(R.drawable.yezi"椰子", 33.00);
Goods s2_goods3 = new Goods(R.drawable.mangguo"特大芒果", 26.00);
shops.add(new Shop(R.drawable.mangguo"海南特产水果", s2_goods1, s2_goods2, s2_goods3));
ShopListAdapter adapter = new ShopListAdapter(mContext, shops);
shop_list.setAdapter(adapter);
}
}

  1. 系统运行结果


图1图2
图1:首页页面,有几种商品的图片名称价格及商铺,还有用户评价及好评率,
还有搜索入口。
图2:分类页面,其中的品牌区,一些大牌商品,让用户挑选。


图3 图4
图3:分类页面的超市一栏,有一些日用百货,图书、零食、牛奶等
图4:分类页面的推荐分类一栏,推荐一些常用分类,充电宝、空调、口红、平板电脑、眼影、手机等


图5 图6
图5:发现页面,有一些水果店铺及一些商品的价格、名称等
图6:搜索的商品分类。


图7 图8
图7:注册页面
图8:登录页面

  1. 实验总结

对于本次仿淘宝商城系统的设计与实现,更加了解了移动应用开发程序的基本原理和方法,提高基于Android Studio对图形用户界面的设计和开发能力,以及对控件事件处理、数据存储以及网络访问的能力。通过本次实验,我成功的完成了实验内容。学会了使用Android中的一些控件去创建应用程序。我学会了基本布局的用法,自定义控件的方法,并了解了ListView及Fragment的详细用法,以及Android中单位的选择和使用,已经基本掌握了UI的相关知识。但是实验过程中还是遇到了一些问题的,我对布局的理解和应用还不是很清晰,而且感觉使用HTTP请求也很复杂很难,对它的使用的掌握仍需继续努力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Procreate绘画教程

Procreate绘画教程 从 30 多年的设计师/插画家那里彻底有效地学习 Procreate&#xff01;已更新至 Procreate 5.2&#xff01; 课程英文名&#xff1a;Procreate Solid Foundations 此视频教程共10.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源码…

三条建议!让您在世界杯期间确保网络安全!

2022年11月&#xff0c;全球的目光都聚焦在依旧“夏日炎炎”的卡塔尔。随着人们观看、分享赛事的习惯从传统的电视转为网络&#xff0c;世界杯必将成为整个2022年的“流量王”。在我国&#xff0c;仅仅德国与日本的一场比赛在微博平台就带来了13.8亿次阅读。 据估计&#xff0…

细粒度图像分类论文研读-2020

文章目录Filtration and Distillation: Enhancing RegionAttention for Fine-Grained Visual Categorization(by localization- classification subnetwork)AbstractIntroductionApproachDiscriminative Regions ProposingFeature Learning and Recognition EnsembleFiltration…

Spring源码深度解析:十一、Spring的循环依赖

一、前言 文章目录&#xff1a;Spring源码深度解析&#xff1a;文章目录 这篇文章是接着 Spring源码深度解析&#xff1a;七、bean的加载① - doGetBean 的继续分析过程。 二、什么是循环依赖 循环依赖&#xff0c;其实就是循环引用&#xff0c;就是两个或者两个以上的 bea…

【MySQL】数据处理函数

只有当你开始相信自己时&#xff0c;你才拥有真正的人生。——《洛奇》 前言&#xff1a; 大家好&#xff0c;我是爱打拳的程序猿。今天给大家展示是数据处理函数的用法&#xff0c;分为单行处理函数和分组函数。数据处理函数主要是为了更方便解决数据的各种问题。文章以代码和…

2023年Unity UI教程

2023年Unity UI教程 Unity 新 UI 系统 UI 工具包的完整概述 课程英文名&#xff1a;Modern Unity UI with UI Toolkit 此视频教程共10.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源码附件全 下载地址 课程编号&#xff1a;336 百度网盘地址&am…

SSM框架-获取容器的方式

9 容器 9.1 获取容器 记载类路径下的容器所在的配置文件,也就是之前用的 public class App2 {public static void main(String[] args) {ApplicationContext ctx new ClassPathXmlApplicationContext("applicationContext.xml");BookDao bookDao (BookDao) ctx.…

liunx 部署 kkfileview文件预览 以及解决https访问

kkfileview gitee地址 https://gitee.com/kekingcn/file-online-preview 1.下载office组件 wget https://kkfileview.keking.cn/LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz tar -zxvf LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz cd LibreOffice_7.1.4.2_Linux_x86-64_rpm/R…

TensorRT推理手写数字分类(一)

系列文章目录 &#xff08;一&#xff09;使用pytorch搭建模型并训练 文章目录系列文章目录前言一、网络搭建1.LeNet网络结构2.pytorch代码二、网络训练1.pytorch代码2.结果展示三、保存和加载模型1.保存整个网络2.保存网络中的参数总结前言 为了学习一下使用TensorRT进行推理…

硬核!Github星标79.4K的阿里强推Java面试参考指南到底有多强?

谈到Java面试&#xff0c;相信大家第一时间脑子里想到的词肯定是金三银四&#xff0c;金九银十。好像大家的潜意识里做Java开发的都得在这个时候才能出去面试&#xff0c;跳槽成功率才高&#xff01;但LZ不这么认为&#xff0c;LZ觉得我们做技术的一生中会遇到很多大大小小的面…

Java并发编程—如何写好代码?链式调用该怎么玩?

目录 一、案例说明 二、原生方式代码流程 三、链式调用代码流程 四、链式调用手搓的方式&#xff1a; 五、总结&#xff1a; 在上一篇博客https://blog.csdn.net/qq_52545155/article/details/128212148?spm1001.2014.3001.5501&#xff0c;博主在写商城统计商品价格的时…

mybatis中其他数据源也使用XML进行操作(SqlSessionFactory.openSession(Connection connection)方法)

文章目录1. 前言2. 先说结论3. 例子1. 准备数据2. 思考过程3. 结论1. 前言 当前在使用springbootmybatis的时候&#xff0c;通常会先在配置文件中配置好数据源&#xff0c;并在Mapper.xml文件编写好相关SQL&#xff0c;使用mybatis进行对数据库进行所谓的crud操作。 有时候会出…

nginx代理https妈妈级手册

目录 背景说明 相关地址 https证书生成 nginx安装及配置 结果展示​编辑 背景说明 为了保证传输加密、访问安全&#xff0c;我们采用nginx服务器将http服务代理为https。所需材料&#xff1a;openssl&#xff08;用来生成证书&#xff09;、http服务、nginx自身。 相关地址…

C/C++第三方库zeromq、log4cpp交叉编译、本地安装ubuntu180.04

一、zeromq的编译安装 1&#xff09;ubuntu下命令 apt-get install libzmq3-dev不推荐这种方式&#xff0c;因为很可能安装的版本并不是最新的&#xff1b; 2&#xff09;自己编译安装&#xff08;推荐&#xff09; 地址&#xff1a;https://github.com/zeromq/libzmq/relea…

设计模式--装饰者模式

文章目录前言一、未使用设计模式二、装饰者模式1.定义2.角色三、应用场景四、优缺点优缺前言 晓子&#xff08;咖啡店员&#xff09;&#xff0c;来一杯美式&#xff0c;加点威士忌和砂糖。 抱歉啊&#xff0c;猫。收银系统还没有你说的组合&#xff0c;要不换一个&#x1f60…

React 的调度系统 Scheduler

大家好&#xff0c;我是前端西瓜哥。今天来学习 React 的调度系统 Scheduler。 React 版本为 18.2.0 React 使用了全新的 Fiber 架构&#xff0c;将原本需要一次性递归找出所有的改变&#xff0c;并一次性更新真实 DOM 的流程&#xff0c;改成通过时间分片&#xff0c;先分成一…

nnUnet测试

https://github.com/MIC-DKFZ/nnUNet nnUnet要在Windows上跑起来有点麻烦&#xff0c;主要是项目路径的问题&#xff0c;我目前测试了2分类遥感数据&#xff08;其实只要是二分类都行&#xff0c;无所谓什么数据&#xff09;&#xff0c;我这里说难是因为我没有安装&#xff0…

【SQL】MVCC 多版本并发控制

MVCC多版本并发控制快照读与当前读隔离级别隐藏字段&#xff0c;undo log 版本链隐藏字段trx_id版本链read view举例说明read committed&#xff08;读已提交&#xff09;隔离级别下repeatable read&#xff08;可重复读&#xff09;隔离级别下innodb如何解决幻读总结并发问题的…

LaTex使用技巧9:argmin / argmax下标写法

记录两种写法 1.arg⁡max⁡θ\mathop{\arg\max}\limits_{\theta}θargmax​的写法 写法1&#xff1a; $\mathop{\arg\max}\limits_{\theta}$ 写法2&#xff1a; $\sideset{}{}{\arg\max}_{\theta}^{} $ 2.arg⁡min⁡θ\mathop{\arg\min}\limits_{\theta}θargmin​的写法 写法…

STL常用生成算法和集合算法(20221207)

STL的常用算法 概述&#xff1a; 算法主要是由头文件<algorithm> <functional> <numeric> 组成。 <algorithm>是所有STL头文件中最大的一个&#xff0c;涉及比较、交换、查找、遍历等等&#xff1b; <functional>定义了一些模板类&#xff0…