Android开发实例-健康食谱应用(二)

本文档将介绍如何利用Android开发一款健康食谱应用,涵盖搜索食谱、获取分类食谱、展示食谱列表及详情。内容包括GridView和ListView的运用、网络图片异步加载、HTTP请求数据获取及滑动分页加载功能。
摘要由CSDN通过智能技术生成

转载请注明出处:http://blog.csdn.net/einarzhang/article/details/44806975

本系列文章主要介绍如何利用Android开发一个简单的健康食谱软件。用到的相关技术如下所示:

  • 提供GridView和ListView的基本使用
  • 利用universal-image-loader异步加载网络图片
  • 通过HttpClient获取网络http请求数据
  • 滑动分页加载数据
软件所用的所有数据均来源于http://doc.yi18.net/cookwendang提供的食谱接口,感谢他们!

软件文件结构如下所示:

MainActivity:主界面Acitivity
MListActivity:子分类列表Acitivity
CListActivity:食谱列表Activity
DetailActivity:食谱详情Activity

MainGridAdapter:主界面食谱分类适配器
CListAdapter:食谱列表适配器
Cook:用于保存食谱信息的pojo

HttpUtils:提供Http请求相关功能
MUtils:提供食谱相关的处理逻辑功能



搜索食谱

我们在主界面提供了搜索食谱功能,当用户输入食谱名称时,软件将给用户展现出想要的食谱列表。搜索食谱我们主要用到 http://api.yi18.net/cook/search接口。
我们在MUtils方法增加搜索食谱方法:
public static ArrayList<Cook> search(final String keyword, final int page) {
		String url = "http://api.yi18.net/cook/search";
		String result = HttpUtils.httpGet(url, new HashMap<String, Object>(){
    {
			put("keyword", URLEncoder.encode(keyword));
			put("page", page);
			put("limit", 20);
		}});
		ArrayList<Cook> dataMap = new  ArrayList<Cook>();
		if(result != null) {
			try {
				JSONObject root = new JSONObject(result);
				if(root.getBoolean("success")) {
					JSONArray datas = root.getJSONArray("yi18");
					for(int i = 0, len = datas.length(); i < len; i++) {
						JSONObject obj = datas.getJSONObject(i);
						Cook c = new Cook();
						c.id = obj.optInt("id");
						c.name = obj.optString("name");
						if(c.name != null) {
							c.name = c.name.replace("<font color=\"red\">", "").replace("</font>", "");
						}
						c.food = obj.optString("description");
						c.img = obj.optString("img");
						c.tag = obj.optString("keywords");
						dataMap.add(c);
					}
				}
			} catch (Exception e) {
			}
		}
		return dataMap;
	}
该搜索方法提供了食谱名称和分页页码参数,便于前端实现分页刷新功能,因为返回的食谱名称中包含Html信息,我们将其过滤掉。搜索结果将进入食谱列表界面,界面展示出搜索的结果信息

获取分类食谱

当用户点击某一子分类时,将获取出分类下的食谱列表,主要用到http://api.yi18.net/cook/list接口
我们在MUtils中增加如下方法:
public static ArrayList<Cook> getCooks(final int classId, final int page, final int sortType) {
		String url = "http://api.yi18.net/cook/list";
		String result = HttpUtils.httpGet(url, new HashMap<String, Object>(){
   {
			put("id", classId);
			put("page", page);
			put("limit", 20);
			put("type", sortType == SORT2 ? "count" : "id");
		}});
		ArrayList<Cook> dataMap = new  ArrayList<Cook>();
		if(result != null) {
			try {
				JSONObject root = new JSONObject(result);
				if(root.getBoolean("success")) {
					JSONArray datas = root.getJSONArray("yi18");
					for(int i = 0, len = datas.length(); i < len; i++) {
						JSONObject obj = datas.getJSONObject(i);
						Cook c = new Cook();
						c.id = obj.optInt("id");
						c.name = obj.optString("name");
						c.count = obj.optInt("count");
						c.fcount = obj.optInt("fcount");
						c.rcount = obj.optInt("rcount");
						c.food = obj.optString("food");
						c.img = obj.optString("img");
						c.tag = obj.optString("tag");
						dataMap.add(c);
					}
				}
			} catch (Exception e) {
			}
		}
		return dataMap;
	}
同搜索食谱功能一致,这里提供page对象,便于提供分页加载


食谱列表界面

食谱列表界面用于展示匹配相应结果的食谱列表,为了用户更好的了解食谱,在列表中我们提供缩略图展示。当用户搜索食谱或者点击某一分类时ÿ
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值