}else {
Log.i("System.out","fail");
}
} catch (Exception e) {
e.printStackTrace();
}} 在结算时要获取自定义控件中的子控件中的内容,相比直接获得控件中的内容来说,这个比较难。需要先获得控件总体布局,然后在总体不居中查找属于数量的控件名。代码如下图5-1-11所示:
图5-1-11 获得自定义控件子控件代码
5.1.4其他功能
收藏,查找,订单展示效果展示界面如下表5-1-6,其中图5-1-12是用户订单表,在这里你可以查看自己的已有订单,对自己以往的订单信息进行查看,这里没有截效果图,图5-1-13是搜索界面,用户输入蔬菜名或者菜市场名可以对蔬菜进行查询,这里采用的是模糊匹配,只要输入大体内容即可查询出自己所需的信息,以方便消费者进行比较,从而选择出性价比更高的蔬菜,收藏界面图5-1-14展示的是曾经自己收藏的商家,以方面自己每次的购买。在这里也可以快捷的需要收藏。
表5-1-6收藏搜索界面表
图5-1-12 订单表
图5-1-13 搜索表
在上图一系列图中自定义适配器代码是其中的重中之重,自定义适配器可以帮助你合理的安排表格中各控件的生成位置等,自定义适配器需要用到上文提到的异步加载,因为Android4.0以后网络通信必须新开子进程,UI进程获取网络通信进程的数据可以采用Handler()方式进行网络通讯与UI之间的数据交换。其中自定义设配器的代码如下表5-1-7展示:
表5-1-7 设配器实现代码片段
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView != null) {
view = convertView;
} else {
view = mInflater.inflate(com.example.android.navigationdrawerexample.R.layout.index_litm, null);
}
ImageView iv_header = (ImageView) view.findViewById(com.example.android.navigationdrawerexample.R.id.index_image);
TextView tv_name = (TextView) view.findViewById(com.example.android.navigationdrawerexample.R.id.index_name);
TextView tv_money = (TextView) view.findViewById(com.example.android.navigationdrawerexample.R.id.index_evaluate);
Map
contact = contacts.get(position);
Log.v("path",(String)contact.get("image") );
asyncloadImage(iv_header, (String)contact.get("image"));
tv_name.setText((CharSequence) contact.get("name"));
tv_money.setText((CharSequence) contact.get("evaluate"));
return view; } 开始采用的是simpleadapter,对listview进行配置,但是后来发现实在不好用,也曾尝试listadapter但是也不理想,最后只能自己写适配器,虽然比较麻烦,但功能还是能按自己的要求去完成还算比较不错,当然如果可以不写的话也可以用其他类型的适配器。代码中的asyncloadImage是自定义的方法,用于异步获取服务器端的图片。和上文中表5-1-4中提到的方法一样,当然除此之外还有一些代码和界面没有展示。
5.2数据库模块的实现
本款软件的数据库模块设计共包含6个表:其中user表里主要存储了注册用户的信息,包括用户名和密码,当本软件注册用户对系统进行登录时,会调取表中的内容进行验证,当用户验证通过时,方可使用软件,user表结构如下表5-2-1所示:
表5-2-1 用户user表结构
名称 字段名称 数据类型 主键 非空 编号 u_ID Int(10) YES YES 用户名 U_name CHAR (6) NO YES 登录密码 U_pass VARCHAR(30) NO YES Seller表中存储的是蔬菜商的内容,当系统登陆后,软件会通过服务器端的PHP文件查询该表,并将表中蔬菜商的名字,商标等信息输出,客户端的APP软件获取PHP的输出内容,并且通过XML在手机界面上输出。其中表seller的结构如下表5-2-2所示:
表5_2_2 蔬菜商seller表结构
名称 字段名称 数据类型 主键 非空 菜商编号 S_id Int(10) YES YES 菜商名字 S_naem Char(6) NO YES 商标 S_url Char(6) NO YES Vegetable表中存储的是蔬菜的相关信息,用于用户对蔬菜的选购,该表中存在蔬菜名称,蔬菜标号,所属菜商及蔬菜单价等信息,这些信息会帮助用户了解并选择自己想要的蔬菜,并将其加入菜单,该表主要为用户提供蔬菜的详细信息,其中他的表结构如下表5-2-3所示:
表5-2-3 蔬菜vegetable表结构
名称 字段名称 数据类型 主键 非空 菜品编号 V_id Int(10) YES YES 菜品名称 V_name Char(6) NO YES 菜商编号 S_id Int(10) NO YES 菜品单价 V_money Double(3) NO YES 菜品图片 V_url Char(6) NO YES Order表详细记录了用户自己的历史订单,该表中有订单编号,时间,总额,用户编号,菜商标号,当用户登录系统后,如果用户想要查询以往的历史订单,他就可以通过选择抽屉效果里的"订单",来借助服务器端PHP文件来查询该表,获取订单的详细信息,当成功获取后,其就在软件中列表显示,其表结构如下表5-2-4所示:
表5-2-4 订单order表结构
名称 字段名称 数据类型 主键 非空 订单编号 O_id Int(10) YES YES 订单总额 O_money Double(3) NO YES 订单时间 O_time datetime NO YES 用户编号 U_id Int(10) NO YES 菜商编号 S_id Int(10) NO YES 订单详情表order_detail记录了订单的详细信息,当用户想要查看某一订单的详细情况时就要读取该表中的内容,当用户点击软件中的某个order时,该软件就会将该order的名字传递给服务器端,服务器端的PHP文件通过处理该软件发送的order名字,查询到od_id及订单编号,然后在通过订单编号查询表order_detail里的订单详情,可以详细的读取出某一订单的订单标号,订单包含的菜品,以及单个菜品的单价等。他的表结构如下5-2-5所示:
表5_2_5 订单详情order_detail表结构
名称 字段名称 数据类型 主键 非空 编号 Od_id Int(10) YES YES 订单编号 O_id Int(10) NO YES 订单菜品 Od_table Int(10) NO YES 收藏表collect记载了用户收藏的菜商商家,通过收藏用户可以把自己喜欢的商家进行收藏,方便用户更好的选购出自己想要的蔬菜。collect表包含收藏编号,用户标号,菜商标号,使用软件时,用户选择查看收藏可以查看自己曾经收藏的一些列菜商的详情,通过和其他表相互联系,用户也可以查看到更加详细的信息。方便了人们的购买,其中collect的表结构如下表5-2-6所示:
表5_2_6 收藏collect表结构
名称 字段名称 数据类型 主键 收藏编号 C_id Int(10) YES 用户编号 U_id Int(10) NO 菜商编号 S_id Int(10) NO 通过以上以上6张表我们存储了关于用户和商家的一系列信息,用户通过服务器端对数据库的操作,可以在手机端查看到自己想要了解的一些信息,完成蔬菜的订购等功能,但是相对正常的大型系统来说这些表的结构相对简单,例如活动表,促销表等O2O软件常用的结构并没有实现,所以数据库的设计可以进行进一步深化研究。
5.3软件的测试
软件测试(英语:software testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程[13]。软件测试是软件开发过程中非常重要的一个环节。缺少测试工作的软件开发是不可靠的。在测试的过程中,我们会发现这样那样的问题。我需要不断的进行修改,保证软件尽可能的满足需求分析的要求
上一篇:移动端APP应用开发课程论文
下一篇:试论APP广告在手机中的应用