当前位置:文档之家› Android项目设计说明书

Android项目设计说明书

Android项目设计说明书
Android项目设计说明书

Android项目设计说明书

——淘宝APP开发

班级:软件工程133

姓名:钱程

邹章鹏

指导老师:陆培军

日期:2016.6

一、小组成员构成

钱程邹章鹏

二、任务分工

1.任务需求分析:邹章鹏

从淘宝网站获取数据,重新构建开发个性化的淘宝购物APP软件,要求实现:1.按关键字查询产品2.查询产品详情3.收藏需要关注的产品4.查看收藏产品清单

2.程序设计:钱程

对需求分析结果进一步分析,构思整体程序设计思路及结构

3.代码编写:钱程

Volley框架

sqllite数据库

JSON数据的传输和解析等等

4.程序测试:邹章鹏

对程序运行结果进行检测和改进

三、项目完成思路

1.确定任务需求:

对任务需求进行分析,明确实验目标

2. 确定项目开发工具

(1)Eclipse+Android SDK+ADT 或Android Studio (APP 开发平台)

(2)Chrome (网页分析工具)

(3)https://www.doczj.com/doc/4514038376.html,/ (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宝贝详情页,并实现立即购买功能。

五、数据库设计

建表语句:

create table if not exists goods (_id integer primary key autoincrement, title text not null , price text not null, sellcount text not null , imgurl text not null, item_id text not null )

六、APP界面

七、核心代码及注释

1.FavoritesActivity:

/**

* 收藏夹页面

* @author Administrator

*

*/

public class FavoritesActivity extends Activity {

private ListView mListView;

private List mData;

private MyAdapter mAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/4514038376.html,yout.activity_favorites);

mListView=(ListView) findViewById(R.id.listView1);

mData=getData();

mAdapter = new MyAdapter(this, mData);

mListView.setAdapter(mAdapter);

AdapterView.OnItemClickListener listViewListener = new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view,

int position, long id) {

// TODO Auto-generated method stub

mData.get(position).getItem_id();

Intent intent = new Intent(FavoritesActivity.this,

InfoActivity.class);

intent.putExtra("item_id", mData.get(position).getItem_id());

startActivity(intent);

}

};

mListView.setOnItemClickListener(listViewListener);

}

private List getData() {

List list=new ArrayList();

SQLiteDatabase db = openOrCreateDatabase("goods.db", MODE_PRIVATE, null);

Cursor c = db.rawQuery("select * from goods", null);

if (c!=null) {

while (c.moveToNext()) {

ItemBean item=new ItemBean();

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();

return list;

}

}

https://www.doczj.com/doc/4514038376.html,Activity

/**

* 商品详细信息页面

* @author Administrator

*

*/

public class InfoActivity extends Activity implements OnClickListener {

private TextView title, price, extraprice, postage, sellcount, from,

shopname;

private Button btnBuy, btnStore, btnShowStore;

private NetworkImageView imageview;

private static String item_id, url;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/4514038376.html,yout.activity_info);

init();

Intent intent = getIntent();

item_id = intent.getStringExtra("item_id");

volley_Get(item_id);

}

private void init() {

title = (TextView) findViewById(https://www.doczj.com/doc/4514038376.html,_title);

price = (TextView) findViewById(https://www.doczj.com/doc/4514038376.html,_price);

extraprice = (TextView) findViewById(https://www.doczj.com/doc/4514038376.html,_extraprice);

postage = (TextView) findViewById(https://www.doczj.com/doc/4514038376.html,_postage);

sellcount = (TextView) findViewById(https://www.doczj.com/doc/4514038376.html,_sellcount);

from = (TextView) findViewById(https://www.doczj.com/doc/4514038376.html,_from);

shopname = (TextView) findViewById(https://www.doczj.com/doc/4514038376.html,_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 获取商品的具体数据

* @param item_id

*/

private void volley_Get(String item_id) {

// 淘宝的url 地址

String url = "https://www.doczj.com/doc/4514038376.html,/h5/mtop.taobao.detail.getdetail/6.0/?appKey=12574478&type=js onp&dataType=jsonp&data=%7B%22itemNumId%22%3A%22{0}%22";

// 将占位符改成商品的id

String tmpUrl = url.replace("{0}", item_id);

VolleyRequest.RequestGet(this, tmpUrl, "abcGet",

new VolleyInterface(this, VolleyInterface.successListener,

VolleyInterface.errorListener) {

@Override

public void onMySuccess(String result) {

// 解析json 格式的数据,并显示在页面上

try {

JSONObject obj = new JSONObject(result);

JSONObject data = obj.getJSONObject("data");

JSONArray apiStack = data.getJSONArray("apiStack");

JSONObject obj1 = apiStack.getJSONObject(0);

// 去掉反斜杠

String value = obj1.getString("value").replaceAll(

"\\\\", "");

JSONObject value1 = new JSONObject(value);

JSONObject delivery = value1

.getJSONObject("delivery");

String fromstr = delivery.getString("from");

String postagestr = delivery.getString("postage");

from.setText(fromstr);

postage.setText(postagestr);

JSONObject itemobj = data.getJSONObject("item");

String titlestr = itemobj.getString("title");

title.setText(titlestr);

JSONArray imagearr = itemobj.getJSONArray("images");

InfoActivity.url = imagearr.getString(0);

JSONObject seller = data.getJSONObject("seller");

String shopnamestr = seller.getString("shopName");

shopname.setText(shopnamestr);

JSONObject item = value1.getJSONObject("item");

String sellcountstr = item.getString("sellCount");

sellcount.setText(sellcountstr);

JSONObject obj2 = value1.getJSONObject("price");

JSONObject priceobj = obj2.getJSONObject("price");

String pricestr = priceobj.getString("priceText");

price.setText(pricestr);

JSONArray extrapriceobj = obj2.getJSONArray("extraPrices");

JSONObject obj3 = extrapriceobj.getJSONObject(0);

String extrapricestr = obj3.getString("priceText");

extraprice.setText(extrapricestr);

} catch (JSONException e) {

e.printStackTrace();

}

ImageLoader loader = new ImageLoader(MyApplication

.getHttpQueues(), new BitmapCache());

imageview.setImageUrl(InfoActivity.url, loader);

}

@Override

public void onMyError(VolleyError error) {

Toast.makeText(InfoActivity.this, error.toString(),

3000).show();

}

});

}

/**

* 商品详细信息页面的点击事件

*/

@Override

public void onClick(View arg0) {

switch (arg0.getId()) {

case R.id.btnbuy:

String url = "https://https://www.doczj.com/doc/4514038376.html,/awp/core/detail.htm?ft=t&id={0}&sid=2ec013fcc5ce2e5372024d 9f1ba3ec01&rn=d8811de3a46628b207e4dc8384a8735c&abtest=8";

Uri uri = Uri.parse(url.replace("{0}", item_id));

Intent it = new Intent(Intent.ACTION_VIEW, uri);

startActivity(it);

break;

case R.id.btnstore:

addFav();

break;

case R.id.btnshowstore:

Intent intent = new Intent(InfoActivity.this, FavoritesActivity.class);

startActivity(intent);

break;

}

}

/**

* 收藏夹商品数据放入sqllite 中进行添加进入收藏夹的操作

*/

private void addFav() {

SQLiteDatabase db = openOrCreateDatabase("goods.db", MODE_PRIVATE, null);

// 创建goods 数据表

db.execSQL("create table if not exists goods (_id integer primary key autoincrement, title text not null , price text not null, sellcount text not null , imgurl text not null, item_id text not null )");

// 查询数据库中有没有该商品

Cursor c = db.rawQuery("select * from goods where item_id='"

+ InfoActivity.item_id + "'", null);

// 如果没有,则插入该数据

if (c.getCount() == 0) {

db.execSQL("insert into goods(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

public class MainActivity extends Activity {

private EditText et;

private ImageButton btnSearch;

private ListView listView;

private List mData;

private MyAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/4514038376.html,yout.activity_main);

init();

clickListen();

}

/**

* 初始化

*/

private void init() {

et = (EditText) findViewById(R.id.editText1);

btnSearch = (ImageButton) findViewById(R.id.imageButton1);

listView = (ListView) findViewById(R.id.listView1);

}

/**

* 点击事件

*/

private void clickListen() {

btnSearch.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

volley_Get();

}

});

AdapterView.OnItemClickListener listViewListener = new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view,

int position, long id) {

mData.get(position).getItem_id();

Intent intent = new Intent(MainActivity.this,

InfoActivity.class);

intent.putExtra("item_id", mData.get(position).getItem_id());

startActivity(intent);

}

};

listView.setOnItemClickListener(listViewListener);

}

/**

* 根据搜素输入框输入的结果,向淘宝网站传递参数,并获取JSON数据

*/

private void volley_Get() {

String url = "https://www.doczj.com/doc/4514038376.html,/search?event_submit_do_new_search_auction=1&_input_charset= utf-8&searchfrom=1&action=home%3Aredirect_app_action&from=1&q={0}&sst=1&n=20&b uying=buyitnow&m=api4h5&wlsort=10&page=1";

String keyName = "";

try {

keyName = URLEncoder.encode(et.getText().toString(), "utf-8");

} catch (Exception e) {

e.printStackTrace();

}

String tmpUrl = url.replace("{0}", keyName);

VolleyRequest.RequestGet(this, tmpUrl, "abcGet",

new VolleyInterface(this, VolleyInterface.successListener,

VolleyInterface.errorListener) {

@Override

public void onMySuccess(String result) {

mData = pauseJson(result);

listView.setAdapter(adapter);

}

@Override

public void onMyError(VolleyError error) {

Toast.makeText(MainActivity.this, error.toString(),

3000).show();

}

});

}

/**

* 得到传来的Json数据,并进行解析,生成listview的数据

*

* @param result

* @return

*/

protected List pauseJson(String result) {

List Item = new ArrayList();

try {

JSONObject obj = new JSONObject(result);

JSONArray itemData = obj.getJSONArray("listItem");

for (int i = 0; i < itemData.length(); i++) {

JSONObject item = itemData.getJSONObject(i);

String imgurl = item.getString("pic_path").replace("60x60",

"100x100");

String title = item.getString("title");

String price = item.getString("price");

String sold = item.getString("sold");

String item_id = item.getString("item_id");

ItemBean list = new ItemBean();

list.setTitle(title);

list.setPrice(price);

list.setSold(sold);

list.setItem_id(item_id);

list.setImgurl(imgurl);

Item.add(list);

adapter = new MyAdapter(this, Item);

}

} catch (Exception e) {

e.printStackTrace();

}

return Item;

}

}

Android设计说明书

Android设计说明书 姓名:卢昌民 学号:1218160228 班级:R工业设计12-2 指导教师:王艳娟 打电话 一.功能介绍: 通过拨号连接网络实现通话的一个小程序。 这里我们新建的工程叫做callphone,实现打电话功能我们需要修改三个文件,

分别是activity_main.xml,MainActivity.java以及AndroidManifest.xml。 其中activity_main.xml负责页面显示,MainActivity.java写java源代码AndroidManifest.xml用来授权使用权限。 二.源代码分析: activity_main.xml中操作:

相关文档 最新文档