正式写之前,先发点感慨,在这里mark下:毕业到现在正好一年整,来杭州正好一年,在公司自己学到了很多东西,虽然有时我们有点有组织,无纪律。但是每人都有颗上进的心,有收获,有伤感(不细说,你懂得)。谨以此篇作为在杭州写的最后一篇Blong,留作纪念,下个星期正式进驻魔都,等着我的会是什么那,祝福自己在魔都各方面都好的发展。加油。。。
这个小项目的就写到这里,就整体功能来说,还有一小部分,感兴趣的童鞋可以参照李刚老师的Android讲义将剩下的补充完整。因为这是个人的练手的项目,必然有很多不足,如果有什么问题,欢迎童鞋一起交流。
管理物品模块:
1. 管理拍卖物品:
其对应的Servlet: ViewOwnerItemServlet:
返回的JSON对象类似为:
[{"id":2,"endtime":"2012-04-02","initPrice":210,"addtime":"2012-03-21","itemName":"display card","bids":[],"maxPrice":210,"itemRemark":"Old video card","itemDesc":"Old video card, still can use","kind":"computer hardware"},{"id":3,"endtime":"2012-03-28","initPrice":21000,"addtime":"2012-03-21","itemName":"The old house","bids":[],"maxPrice":25000,"itemRemark":"Old house","itemDesc":"40 years old house","kind":"house property"}]
2.查看自己的拍卖物品对应的布局文件:manage_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center" android:background="@drawable/bg" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="horizontal" android:gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/sub_title_margin" > <LinearLayout android:orientation="vertical" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="12px" > <TextView android:text="@string/manage_item" android:textSize="@dimen/label_font_size" android:textColor="@color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/bnAdd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/add_item" /> </LinearLayout> <Button android:id="@+id/bn_home" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/label_font_size" android:background="@drawable/home" /> </LinearLayout> <!-- 显示物品列表的ListView --> <ListView android:id="@+id/itemList" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
3.管理物品对应的Activity为:MangerItem.java
package com.infy.auction.client; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.infy.auction.client.util.DialogUtil; import com.infy.auction.client.util.HttpUtil; import com.infy.auction.client.util.JSONArrayAdapter; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.AdapterView.OnItemClickListener; public class ManageItem extends Activity{ Button bnHome; Button bnAdd; ListView itemList; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.manage_item); //获取界面上的组件 bnHome = (Button)findViewById(R.id.bn_home); bnAdd = (Button)findViewById(R.id.bnAdd); itemList = (ListView)findViewById(R.id.itemList); //添加按钮事件监听器 bnHome.setOnClickListener(new FinishListener(this)); bnAdd.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //增加拍卖的物品 Intent intent = new Intent(ManageItem.this, AddItem.class); startActivity(intent); } }); //定义发送的URL String url = HttpUtil.BASE_URL +"ViewOwnerItemServlet"; try{ //向指定的URL发送请求 JSONArray jsonArray = new JSONArray(HttpUtil.getRequest(url)); //将服务器响应包装成Adapter JSONArrayAdapter adapter = new JSONArrayAdapter(ManageItem.this, jsonArray, "itemName", true); itemList.setAdapter(adapter); }catch(Exception e){ DialogUtil.showDialog(this, "服务器响应异常,请稍后再试!", false); e.printStackTrace(); } itemList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int postion, long id) { // TODO Auto-generated method stub //加载详细的清单Item viewItemInBid(postion); } }); } private void viewItemInBid(int position){ //加载detail_in_bid.xml布局 View detailView = getLayoutInflater().inflate(R.layout.detail_in_bid, null); //获取detail_in_bid界面中的文本框 EditText itemName =(EditText)detailView.findViewById(R.id.itemName); EditText itemKind = (EditText)detailView.findViewById(R.id.itemKind); EditText maxPrice = (EditText)detailView.findViewById(R.id.maxPrice); EditText initPrice = (EditText)detailView.findViewById(R.id.initPrice); EditText endTime = (EditText)detailView.findViewById(R.id.endTime); EditText itemRemark = (EditText)detailView.findViewById(R.id.itemRemark); //获取被单击列表项的所包装的JSONObject JSONObject jsonObject = (JSONObject)itemList.getAdapter().getItem(position); try{ //通过文本框显示物品详情 itemName.setText(jsonObject.getString("itemName")); itemKind.setText(jsonObject.getString("kind")); maxPrice.setText(jsonObject.getString("maxPrice")); itemRemark.setText(jsonObject.getString("itemDesc")); initPrice.setText(jsonObject.getString("initPrice")); endTime.setText(jsonObject.getString("endtime")); }catch(JSONException e){ e.printStackTrace(); } DialogUtil.showDialog(ManageItem.this, detailView); } }
4.添加拍卖物品的Servlet:对应的服务器端的Servlet;AddItemServlet.java
5.添加拍卖物品:add_item.xml
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@drawable/bg" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/add_item_title" android:textSize="@dimen/label_font_size" android:gravity="center" android:padding="@dimen/title_padding" android:textColor="@color/white" /> <!-- 输入物品名称 --> <TableRow> <TextView android:text="@string/item_name" android:textSize="@dimen/label_font_size" android:textColor="@color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/itemName" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </TableRow> <!-- 输入物品描述 --> <TableRow> <TextView android:text="@string/item_desc" android:textSize="@dimen/label_font_size" android:textColor="@color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/itemDesc" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </TableRow> <!-- 输入物品的备注行 --> <TableRow> <TextView android:text="@string/remark" android:textSize="@dimen/label_font_size" android:textColor="@color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/itemRemark" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </TableRow> <!-- 输入起拍的价格 --> <TableRow> <TextView android:text="@string/init_price" android:textSize="@dimen/label_font_size" android:textColor="@color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/initPrice" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </TableRow> <!-- 选择有效地时间 --> <TableRow> <TextView android:text="@string/avail_time" android:textSize="@dimen/label_font_size" android:textColor="@color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Spinner android:id="@+id/availTime" android:layout_width="fill_parent" android:layout_height="wrap_content" android:entries="@array/availTime" /> </TableRow> <!-- 选择物品种类 --> <TableRow> <TextView android:text="@string/item_kind" android:textSize="@dimen/label_font_size" android:textColor="@color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Spinner android:id="@+id/itemKind" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </TableRow> <!-- 定义按钮 --> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" > <Button android:id="@+id/bnAdd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/add" /> <Button android:id="@+id/bnCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cancel" /> </LinearLayout> </TableLayout>
6.添加物品的Activity:AddItem.java
package com.infy.auction.client; import java.util.HashMap; import java.util.Map; import org.json.JSONArray; import org.json.JSONObject; import com.infy.auction.client.util.DialogUtil; import com.infy.auction.client.util.HttpUtil; import com.infy.auction.client.util.JSONArrayAdapter; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; public class AddItem extends Activity { private static final String TAG = "AddItem"; EditText itemNmae, itemDesc, itemRemark, initPrice; Spinner itemKind, avaiTime; Button bnAdd, bnCancel; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.add_item); // 获取界面的组件 itemNmae = (EditText) findViewById(R.id.itemName); itemDesc = (EditText) findViewById(R.id.itemDesc); itemRemark = (EditText) findViewById(R.id.itemRemark); initPrice = (EditText) findViewById(R.id.initPrice); itemKind = (Spinner) findViewById(R.id.itemKind); avaiTime = (Spinner) findViewById(R.id.availTime); // 定义发送请求的地址,获得物品种类的数量 String url = HttpUtil.BASE_URL + "ViewKindServlet"; JSONArray jsonArray = null; try { jsonArray = new JSONArray(HttpUtil.getRequest(url)); Log.i(TAG, "jsonArray-->" + jsonArray.toString()); } catch (Exception e1) { e1.printStackTrace(); } // 将JSonArray包装成Adapter JSONArrayAdapter adapter = new JSONArrayAdapter(AddItem.this, jsonArray, "kindName", false); // 显示品种物类的列表 itemKind.setAdapter(adapter); // 获得界面中的两个按钮 bnAdd = (Button) findViewById(R.id.bnAdd); bnCancel = (Button) findViewById(R.id.bnCancel); // 添加按钮的监听器事件 bnCancel.setOnClickListener(new FinishListener(this)); bnAdd.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // 进行输入的校验 if (validate()) { // 获取用户输入的物品名和物品的描述信息等 String name = itemNmae.getText().toString().trim(); String desc = itemDesc.getText().toString().trim(); String remark = itemRemark.getText().toString().trim(); String price = initPrice.getText().toString().trim(); JSONObject kind = (JSONObject) itemKind.getSelectedItem(); int avail = avaiTime.getSelectedItemPosition(); // 根据用户选择有效时间选项,指定实际的 有效时间 switch (avail) { case 5: avail = 7; break; case 6: avail = 30; break; default: avail += 1; break; } try { // 添加物品 String result = addItem(name, desc, remark, price, kind .getInt("id"), avail); // 显示对话框 DialogUtil.showDialog(AddItem.this, result, true); } catch (Exception e) { DialogUtil.showDialog(AddItem.this, "服务器异常,请稍后再试!", false); e.printStackTrace(); } } } }); } // 对输入的物品名和起拍价格进行检验 private boolean validate() { String name = itemNmae.getText().toString().trim(); if (name.equals("")) { DialogUtil.showDialog(this, "物品名称是必须要填的!", false); return false; } String price = initPrice.getText().toString().trim(); if (price.equals("")) { DialogUtil.showDialog(this, "起拍价格是必须要填的!", false); return false; } try { // 尝试把起拍价格转化为浮点数 Double.parseDouble(price); } catch (NumberFormatException e) { DialogUtil.showDialog(this, "起拍价格必须是数值!", false); return false; } return true; } private String addItem(String name, String desc, String remark, String initPrice, int kindId, int availTime) throws Exception { // 使用Map封装请求参数 Map<String, String> map = new HashMap<String, String>(); map.put("itemName", name); map.put("itemDesc", desc); map.put("itemRemark", remark); map.put("initPrice", initPrice); map.put("kindId", kindId + ""); map.put("availTime", availTime + ""); // 发送请求的URL String url = HttpUtil.BASE_URL + "AddItemServlet"; return HttpUtil.postRequest(url, map); } }
7.效果图: