Android项目设计说明书.docx
《Android项目设计说明书.docx》由会员分享,可在线阅读,更多相关《Android项目设计说明书.docx(21页珍藏版)》请在冰豆网上搜索。
Android项目设计说明书
Android项目设计说明书
——淘宝APP开发
班级:
软件工程133
姓名:
***
邹章鹏
指导老师:
***
日期:
2016.6
一、小组成员构成
钱程邹章鹏
二、任务分工
1.任务需求分析:
邹章鹏
从淘宝网站获取数据,重新构建开发个性化的淘宝购物APP软件,要求实现:
1.按关键字查询产品2.查询产品详情3.收藏需要关注的产品4.查看收藏产品清单
2.程序设计:
钱程
对需求分析结果进一步分析,构思整体程序设计思路及结构
3.代码编写:
钱程
Volley框架
sqllite数据库
JSON数据的传输和解析等等
4.程序测试:
邹章鹏
对程序运行结果进行检测和改进
三、项目完成思路
1.确定任务需求:
对任务需求进行分析,明确实验目标
2.确定项目开发工具
(1)Eclipse+AndroidSDK+ADT或AndroidStudio(APP开发平台)
(2)Chrome(网页分析工具)
(3)(JSON查看工具)
(4)RegexBuddy(正则表达式调式工具)或JSON组件,可采用json或
fastjson
(5)HttpClient(获取HTML数据)
(6)SQLite(存放收藏产品数据)
3.模块分析
(1)主界面模块:
该模块主要用于商品搜索
(2)商品列表模块:
该模块主要用于搜索后商品的显示,包括商品名称、价格和销量
(3)商品详情模块:
该模块主要显示搜索商品的详细信息,以及提供购买,收藏和收藏夹功能。
(4)收藏夹模块:
该模块主要显示收藏过的商品
四、项目设计
1.总体思路:
(1)页面设计
(2)连接淘宝获取数据(3)解析数据(4)页面显示(5)数据库的操作
2.主要功能:
界面1:
上方为EditText,用户可以此输入搜索词,下面方采用列表显示搜索得到的产品列表,APP首次启动时,此时没有用户输入查询词,默认显示“皮鞋”或其它自设定词的查询产品列表。
产品列表中至少需要显示产品图片、产品标题、产品价格、产品销量,可以显示更多关于产品的信息,但至少需显示上述4项。
列表以行显示,一行显示一个产品,用户单击某一行,则APP跳转显示到界面2
界面2:
显示从界面跳转过来的产品的详细信息,至少需要包括(图片,标题,价格,折扣价,销量,卖家昵称,其它信息可自行添加),在界面的最下方显示“购买”、"收藏"、"查看"按钮,用户单击"购买"按钮,跳转到淘宝对应的产品详情页,如果用户单击"收藏",将该产品信息收藏(或以设计一张数据表保存收藏的产品),如果该产品未被收藏过,则显示弹出信息"收藏成功",如果产品已被收藏过,则显示"收藏失败,该产品已被收藏,请单击查看按钮"。
界面3:
用户单击查看按钮后的显示已收藏产品界面,显示该用户所收藏的所有产品,以列表形式显示
界面4:
单击购买按钮,自动跳转至淘宝APP宝贝详情页,并实现立即购买功能。
五、数据库设计
建表语句:
createtableifnotexistsgoods(_idintegerprimarykeyautoincrement,titletextnotnull,pricetextnotnull,sellcounttextnotnull,imgurltextnotnull,item_idtextnotnull)
六、APP界面
七、核心代码及注释
1.FavoritesActivity:
/**
*收藏夹页面
*@authorAdministrator
*
*/
publicclassFavoritesActivityextendsActivity{
privateListViewmListView;
privateListmData;
privateMyAdaptermAdapter;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favorites);
mListView=(ListView)findViewById(R.id.listView1);
mData=getData();
mAdapter=newMyAdapter(this,mData);
mListView.setAdapter(mAdapter);
AdapterView.OnItemClickListenerlistViewListener=newAdapterView.OnItemClickListener(){
@Override
publicvoidonItemClick(AdapterView
>parent,Viewview,
intposition,longid){
//TODOAuto-generatedmethodstub
mData.get(position).getItem_id();
Intentintent=newIntent(FavoritesActivity.this,
InfoActivity.class);
intent.putExtra("item_id",mData.get(position).getItem_id());
startActivity(intent);
}
};
mListView.setOnItemClickListener(listViewListener);
}
privateListgetData(){
Listlist=newArrayList();
SQLiteDatabasedb=openOrCreateDatabase("goods.db",MODE_PRIVATE,null);
Cursorc=db.rawQuery("select*fromgoods",null);
if(c!
=null){
while(c.moveToNext()){
ItemBeanitem=newItemBean();
item.setTitle(c.getString(c.getColumnIndex("title")));
item.setPrice(c.getString(c.getColumnIndex("price")));
item.setSold(c.getString(c.getColumnIndex("sellcount")));
item.setImgurl(c.getString(c.getColumnIndex("imgurl")));
item.setItem_id(c.getString(c.getColumnIndex("item_id")));
list.add(item);
}
c.close();
}
db.close();
returnlist;
}
}
2.InfoActivity
/**
*商品详细信息页面
*@authorAdministrator
*
*/
publicclassInfoActivityextendsActivityimplementsOnClickListener{
privateTextViewtitle,price,extraprice,postage,sellcount,from,
shopname;
privateButtonbtnBuy,btnStore,btnShowStore;
privateNetworkImageViewimageview;
privatestaticStringitem_id,url;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_info);
init();
Intentintent=getIntent();
item_id=intent.getStringExtra("item_id");
volley_Get(item_id);
}
privatevoidinit(){
title=(TextView)findViewById(R.id.info_title);
price=(TextView)findViewById(R.id.info_price);
extraprice=(TextView)findViewById(R.id.info_extraprice);
postage=(TextView)findViewById(R.id.info_postage);
sellcount=(TextView)findViewById(R.id.info_sellcount);
from=(TextView)findViewById(R.id.info_from);
shopname=(TextView)findViewById(R.id.info_shopname);
btnBuy=(Button)findViewById(R.id.btnbuy);
btnStore=(Button)findViewById(R.id.btnstore);
btnShowStore=(Button)findViewById(R.id.btnshowstore);
imageview=(NetworkImageView)findViewById(R.id.imageView1);
btnBuy.setOnClickListener(this);
btnStore.setOnClickListener(this);
btnShowStore.setOnClickListener(this);
}
/**
*根据商品id获取商品的具体数据
*@paramitem_id
*/
privatevoidvolley_Get(Stringitem_id){
//淘宝的url地址
Stringurl="
//将占位符改成商品的id
StringtmpUrl=url.replace("{0}",item_id);
VolleyRequest.RequestGet(this,tmpUrl,"abcGet",
newVolleyInterface(this,VolleyInterface.successListener,
VolleyInterface.errorListener){
@Override
publicvoidonMySuccess(Stringresult){
//解析json格式的数据,并显示在页面上
try{
JSONObjectobj=newJSONObject(result);
JSONObjectdata=obj.getJSONObject("data");
JSONArrayapiStack=data.getJSONArray("apiStack");
JSONObjectobj1=apiStack.getJSONObject(0);
//去掉反斜杠
Stringvalue=obj1.getString("value").replaceAll(
"\\\\","");
JSONObjectvalue1=newJSONObject(value);
JSONObjectdelivery=value1
.getJSONObject("delivery");
Stringfromstr=delivery.getString("from");
Stringpostagestr=delivery.getString("postage");
from.setText(fromstr);
postage.setText(postagestr);
JSONObjectitemobj=data.getJSONObject("item");
Stringtitlestr=itemobj.getString("title");
title.setText(titlestr);
JSONArrayimagearr=itemobj.getJSONArray("images");
InfoActivity.url=imagearr.getString(0);
JSONObjectseller=data.getJSONObject("seller");
Stringshopnamestr=seller.getString("shopName");
shopname.setText(shopnamestr);
JSONObjectitem=value1.getJSONObject("item");
Stringsellcountstr=item.getString("sellCount");
sellcount.setText(sellcountstr);
JSONObjectobj2=value1.getJSONObject("price");
JSONObjectpriceobj=obj2.getJSONObject("price");
Stringpricestr=priceobj.getString("priceText");
price.setText(pricestr);
JSONArrayextrapriceobj=obj2.getJSONArray("extraPrices");
JSONObjectobj3=extrapriceobj.getJSONObject(0);
Stringextrapricestr=obj3.getString("priceText");
extraprice.setText(extrapricestr);
}catch(JSONExceptione){
e.printStackTrace();
}
ImageLoaderloader=newImageLoader(MyApplication
.getHttpQueues(),newBitmapCache());
imageview.setImageUrl(InfoActivity.url,loader);
}
@Override
publicvoidonMyError(VolleyErrorerror){
Toast.makeText(InfoActivity.this,error.toString(),
3000).show();
}
});
}
/**
*商品详细信息页面的点击事件
*/
@Override
publicvoidonClick(Viewarg0){
switch(arg0.getId()){
caseR.id.btnbuy:
Stringurl="
Uriuri=Uri.parse(url.replace("{0}",item_id));
Intentit=newIntent(Intent.ACTION_VIEW,uri);
startActivity(it);
break;
caseR.id.btnstore:
addFav();
break;
caseR.id.btnshowstore:
Intentintent=newIntent(InfoActivity.this,FavoritesActivity.class);
startActivity(intent);
break;
}
}
/**
*收藏夹商品数据放入sqllite中进行添加进入收藏夹的操作
*/
privatevoidaddFav(){
SQLiteDatabasedb=openOrCreateDatabase("goods.db",MODE_PRIVATE,null);
//创建goods数据表
db.execSQL("createtableifnotexistsgoods(_idintegerprimarykeyautoincrement,titletextnotnull,pricetextnotnull,sellcounttextnotnull,imgurltextnotnull,item_idtextnotnull)");
//查询数据库中有没有该商品
Cursorc=db.rawQuery("select*fromgoodswhereitem_id='"
+InfoActivity.item_id+"'",null);
//如果没有,则插入该数据
if(c.getCount()==0){
db.execSQL("insertintogoods(title,price,sellcount,imgurl,item_id)values('"
+title.getText().toString()
+"','"
+price.getText().toString()
+"','"
+sellcount.getText().toString()
+"','"
+InfoActivity.url
+"','"+InfoActivity.item_id+"')");
Toast.makeText(InfoActivity.this,"该商品收藏成功",3000).show();
}else{
Toast.makeText(InfoActivity.this,"该商品已被收藏",3000).show();
}
c.close();
db.close();
}
}
3.MainActivity
publicclassMainActivityextendsActivity{
privateEditTextet;
privateImageButtonbtnSearch;
privateListViewlistView;
privateListmData;
privateMyAdapteradapter;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
clickListen();
}
/**
*初始化
*/
privatevoidinit(){
et=(EditText)findViewById(R.id.editText1);
btnSearch=(ImageButton)findViewById(R.id.imageButton1);
listView=(ListView)findViewById(R.id.listView1);
}
/**
*点击事件
*/
privatevoidclickListen(){
btnSearch.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewarg0){
volley_Get();
}
});
AdapterView.OnItemClickListenerlistViewListener=newAda