安卓APP源碼和設(shè)計(jì)報(bào)告——仿淘寶水果商城
項(xiàng)目名稱
仿淘寶水果商城項(xiàng)目概述
隨著互聯(lián)網(wǎng)技術(shù)地高速發(fā)展,計(jì)算機(jī)進(jìn)入到每一個(gè)人的生活里,從人們的生活方式到整個(gè)社會(huì)的運(yùn)轉(zhuǎn)都產(chǎn)生了巨大的變革,而在信息技術(shù)發(fā)達(dá)的今天,互聯(lián)網(wǎng)的各種娛樂方式都在滲透到人們的生活方式之中,近年來人們生活水平的提高,生活壓力的增加,精神生活的空虛,使人們對于精神世界的豐富需求越來越大,因此近年來,電視、電影、音樂等娛樂產(chǎn)業(yè)都在飛速發(fā)展,而音樂雖然是在人類歷史上早就存在的娛樂方式,但在信息技術(shù)高速發(fā)展的現(xiàn)在,大部分產(chǎn)業(yè)都在實(shí)現(xiàn)互聯(lián)網(wǎng)+的概念,而且隨著全球數(shù)字娛樂業(yè)的發(fā)展,以及網(wǎng)絡(luò)傳播的快速、高效、便捷,傳統(tǒng)的傳播方式不能滿足人們對于這方面的需求,所以許多傳統(tǒng)的產(chǎn)業(yè)都在實(shí)現(xiàn)數(shù)字化。仿淘寶商城的產(chǎn)品展示系統(tǒng)是主要面對用戶的產(chǎn)品信息展示,也是用戶最終想尋找的信息內(nèi)容。產(chǎn)品展示系統(tǒng)主要就是將仿淘寶商城中各類產(chǎn)品信息進(jìn)行實(shí)時(shí)的發(fā)布,用戶可以在首頁清晰的瀏覽查詢到各類產(chǎn)品信息,而且還提供強(qiáng)大的查詢功能。
3、目的與要求
通過一個(gè)綜合的實(shí)例,進(jìn)一步掌握移動(dòng)應(yīng)用程序開發(fā)的基本原理和方法,提高基于Android Studio對圖形用戶界面的設(shè)計(jì)和開發(fā)能力,以及對控件事件處理、數(shù)據(jù)存儲(chǔ)以及網(wǎng)絡(luò)訪問的能力。具體包括如下幾個(gè)方面:
1)熟練掌握Android開發(fā)工具Android Studio的使用。
2)熟練掌握Android線性布局的使用方法,并熟練使用Activity、Fragment、ListView、TextView、Button、EditText、ImageView等視圖組件構(gòu)建具有良好用戶體驗(yàn)的App界面。
3)熟練掌握對控件常用事件進(jìn)行處理的方法。
4)掌握數(shù)據(jù)存儲(chǔ)或網(wǎng)絡(luò)訪問的基本方法。
4、系統(tǒng)實(shí)現(xiàn)環(huán)境
集成開發(fā)環(huán)境:Android Studio 3.0及以上
JDK :1.8及以上
Android版本:9.0及以上
Android API:28及以上
5、系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
本系統(tǒng)所包含的功能有用戶登錄、用戶注冊、首頁、分類、發(fā)現(xiàn)、搜索等功能。用戶登錄及注冊:初次使用本系統(tǒng)的用戶需要注冊用戶名和密碼,登錄完成提示您已成功登錄后,用戶可進(jìn)入首頁瀏覽商品。首頁、分類及發(fā)現(xiàn):用戶可以瀏覽商品,在首頁可以搜索所需信息,分類頁面有超市,大牌及常用分類。分別是一些日用品,奢侈品及各種電子產(chǎn)品。發(fā)現(xiàn)頁面是一些水果店鋪及水果分類。
登錄頁面主要代碼

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,?"賬號(hào)或密碼錯(cuò)誤", 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,?"賬號(hào)已被注冊", 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產(chǎn)品京東自營旗艦店"));
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);
}
網(wǎng)絡(luò)連接請求的主要代碼
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("大牌區(qū)");
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;
}
}
發(fā)現(xiàn)頁面的主要代碼

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,?"海南特產(chǎn)水果", s2_goods1, s2_goods2, s2_goods3));
ShopListAdapter adapter =?new?ShopListAdapter(mContext, shops);
shop_list.setAdapter(adapter);
}
}
系統(tǒng)運(yùn)行結(jié)果
圖1:首頁頁面,有幾種商品的圖片名稱價(jià)格及商鋪,還有用戶評價(jià)及好評率,還有搜索入口。
圖2:分類頁面,其中的品牌區(qū),一些大牌商品,讓用戶挑選。
圖3:分類頁面的超市一欄,有一些日用百貨,圖書、零食、牛奶等
圖4:分類頁面的推薦分類一欄,推薦一些常用分類,充電寶、空調(diào)、口紅、平板電腦、眼影、手機(jī)等
圖5:發(fā)現(xiàn)頁面,有一些水果店鋪及一些商品的價(jià)格、名稱等
圖6:搜索的商品分類。
圖7:注冊頁面
圖8:登錄頁面
實(shí)驗(yàn)總結(jié)
對于本次仿淘寶商城系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),更加了解了移動(dòng)應(yīng)用開發(fā)程序的基本原理和方法,提高基于Android Studio對圖形用戶界面的設(shè)計(jì)和開發(fā)能力,以及對控件事件處理、數(shù)據(jù)存儲(chǔ)以及網(wǎng)絡(luò)訪問的能力。通過本次實(shí)驗(yàn),我成功的完成了實(shí)驗(yàn)內(nèi)容。學(xué)會(huì)了使用Android中的一些控件去創(chuàng)建應(yīng)用程序。我學(xué)會(huì)了基本布局的用法,自定義控件的方法,并了解了ListView及Fragment的詳細(xì)用法,以及Android中單位的選擇和使用,已經(jīng)基本掌握了UI的相關(guān)知識(shí)。但是實(shí)驗(yàn)過程中還是遇到了一些問題的,我對布局的理解和應(yīng)用還不是很清晰,而且感覺使用HTTP請求也很復(fù)雜很難,對它的使用的掌握仍需繼續(xù)努力!