`
lovnet
  • 浏览: 6670408 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

指尖上的Android之实战篇(八)

 
阅读更多

正式写之前,先发点感慨,在这里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.效果图:

分享到:
评论

相关推荐

    pypy3.6-v7.3.0rc1-aarch64.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    星闪技术介绍.pptx

    星闪技术介绍

    FAT32文件系统的数据隐写

    源代码

    pypy2.7-v7.0.0-linux32.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    ppt328328328

    328328328328

    全自动晶圆激光隐形切割设备,全球前10强生产商排名及市场份额.pdf

    QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com

    人工智能python安装环境(Miniconda3-py39-)(pycharm-community-2021.3.2.exe)

    人工智能python安装环境(Miniconda3-py39-)(pycharm-community-2021.3.2.exe)

    钢铁是怎样炼成的ppt模板x.pptx

    钢铁是怎样炼成的ppt模板x.pptx

    工作汇报 年终总结82.pptx

    封面 标题:基于物联网的智能家居系统年度总结 报告人信息:[姓名]、[职位/角色]、[所属机构/公司] 日期:[具体日期] 目录 引言 年度工作回顾 系统进展与亮点 技术创新与应用 市场反馈与用户评价 存在问题与挑战 未来展望与计划 结束语与感谢 一、引言 简要介绍智能家居系统的重要性和发展趋势 回顾本年度的工作目标和重点 二、年度工作回顾 系统建设与维护 完成的项目与里程碑 系统稳定性与可靠性提升 团队建设与培训 团队成员构成与职责 培训与技能提升活动 合作伙伴与资源整合 与供应商、合作伙伴的合作情况 资源整合与利用 三、系统进展与亮点 功能扩展与优化 新增功能介绍与效果评估 现有功能的优化与改进 用户体验提升 界面设计与交互优化 用户反馈与改进措施 四、技术创新与应用 物联网技术的应用 传感器与通信技术的升级 大数据分析与应用 智能家居的智能化管理 自动化控制与节能策略 安全防护与预警系统 五、市场反馈与用户评价 市场反馈分析 市场需求与竞争态势 市场占有率与增长趋势 用户评价总结 用户满意度调查结果

    LabVIEW专栏一、编写单独vi

    LabVIEW专栏一、编写单独vi

    SQL/数据库查询语言

    SQL/数据库查询语言

    flutter 常用插件整理附加使用实例

    flutter 常用插件整理附加使用实例

    IMG_20240327_093721.jpg

    IMG_20240327_093721.jpg

    列车车厢重排问题.pdf

    列车车厢重排问题是一个著名的组合优化问题,也被称为火车车厢重排问题(Railway Carriage Shunting Problem),它的目标是通过尽可能少的操作将一列乱序的车厢重新排列成有序的顺序。 在这个问题中,我们有一列由1到n号标记的乱序车厢。初始时,所有的车厢都停在一条没有分叉的轨道上。现在我们要进行一系列操作来将车厢按照升序排列。每个操作可以将车厢从一段轨道移到另一端轨道的任意位置。而这些操作的目标是,经过一定的操作后,所有车厢按照升序排列。 这是一个经典的组合优化问题,可以使用多种算法来解决。其中一种常见的解法是使用贪心算法。

    pypy3.6-v7.3.1-s390x.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习

    简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习 简历是展示个人经历、技能和能力的重要文档,以下是一个常见的简历格式和内容模板,供您参考: 简历格式: 头部信息:包括姓名、联系方式(电话号码、电子邮件等)、地址等个人基本信息。 求职目标(可选):简短描述您的求职意向和目标。 教育背景:列出您的教育经历,包括学校名称、所学专业、就读时间等。 工作经验:按时间顺序列出您的工作经历,包括公司名称、职位、工作时间、工作职责和成就等。 技能和能力:列出您的专业技能、语言能力、计算机技能等与职位相关的能力。 实习经验/项目经验(可选):如果您有相关实习或项目经验,可以列出相关信息。 获奖和荣誉(可选):列出您在学术、工作或其他领域获得的奖项和荣誉。 自我评价(可选):简要描述您的个人特点、能力和职业目标。 兴趣爱好(可选):列出您的兴趣爱好,展示您的多样性和个人素质。 参考人(可选):如果您有可提供推荐的人员,可以在简历中提供其联系信息。 简历内容模板: 姓名: 联系方式: 地址: 求职目标: (简短描述您的求职意

    pypy3.6-v7.3.3rc1-linux32.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    智能床新品618营销推广项目方案ss.pptx

    智能床新品618营销推广项目方案ss.pptx

    asp代码(软件工程)精品课程教学网站的设计与实现ASP+SQLSever2000

    asp代码《软件工程》精品课程教学网站的设计与实现 ASP+SQL Sever2000本资源系百度网盘分享地址

Global site tag (gtag.js) - Google Analytics