- 项目名称
仿淘宝水果商城 - 项目概述
随着互联网技术地高速发展,计算机进入到每一个人的生活里,从人们的生活方式到整个社会的运转都产生了巨大的变革,而在信息技术发达的今天,互联网的各种娱乐方式都在渗透到人们的生活方式之中,近年来人们生活水平的提高,生活压力的增加,精神生活的空虚,使人们对于精神世界的丰富需求越来越大,因此近年来,电视、电影、音乐等娱乐产业都在飞速发展,而音乐虽然是在人类历史上早就存在的娱乐方式,但在信息技术高速发展的现在,大部分产业都在实现互联网+的概念,而且随着全球数字娱乐业的发展,以及网络传播的快速、高效、便捷,传统的传播方式不能满足人们对于这方面的需求,所以许多传统的产业都在实现数字化。仿淘宝商城的产品展示系统是主要面对用户的产品信息展示,也是用户最终想寻找的信息内容。产品展示系统主要就是将仿淘宝商城中各类产品信息进行实时的发布,用户可以在首页清晰的浏览查询到各类产品信息,而且还提供强大的查询功能。
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_home, null);
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_home, null);
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_item1, null);
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_item1, null);
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_grid, null);
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_item1, null);
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_community, null);
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图2
图1:首页页面,有几种商品的图片名称价格及商铺,还有用户评价及好评率,
还有搜索入口。
图2:分类页面,其中的品牌区,一些大牌商品,让用户挑选。
图3 图4
图3:分类页面的超市一栏,有一些日用百货,图书、零食、牛奶等
图4:分类页面的推荐分类一栏,推荐一些常用分类,充电宝、空调、口红、平板电脑、眼影、手机等
图5 图6
图5:发现页面,有一些水果店铺及一些商品的价格、名称等
图6:搜索的商品分类。
图7 图8
图7:注册页面
图8:登录页面
- 实验总结
对于本次仿淘宝商城系统的设计与实现,更加了解了移动应用开发程序的基本原理和方法,提高基于Android Studio对图形用户界面的设计和开发能力,以及对控件事件处理、数据存储以及网络访问的能力。通过本次实验,我成功的完成了实验内容。学会了使用Android中的一些控件去创建应用程序。我学会了基本布局的用法,自定义控件的方法,并了解了ListView及Fragment的详细用法,以及Android中单位的选择和使用,已经基本掌握了UI的相关知识。但是实验过程中还是遇到了一些问题的,我对布局的理解和应用还不是很清晰,而且感觉使用HTTP请求也很复杂很难,对它的使用的掌握仍需继续努力!