博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
发现----Android Demo
阅读量:7061 次
发布时间:2019-06-28

本文共 10728 字,大约阅读时间需要 35 分钟。

       时间悄悄的走,转眼来实习已经三个月了,三个月的时间,小编慢慢的成长着,从刚开始的电商项目到现在的车段子项目,小编在走过一个又一个项目的同时,走过了一个又一个战胜自己的奇迹,每次遇到一个新的技术点,小编就开始捣鼓,捣鼓这回事,真的需要勇气,捣鼓捣鼓,duang,功能出来了,好开心`(*∩_∩*)′,能力往往是做了才会获得,而不是有了能力才去做,丫头加油。小伙伴们可能都在某些app上看见过发现的功能,点击发现的按钮自动加载最热门的信息,在小编最近捣鼓的项目里面就有这个功能,经过几天的捣鼓,终于新鲜出炉了,今天这篇博客小编就来简单的介绍一下如何点击发现按钮,自动加载我们所需要的相关信息,希望可以帮助到需要的小伙伴们,还请小伙伴多多指教`(*∩_∩*)′。

       首先,我们来编写我们的实体层,需要用到两个实体,第一个content如下所示:

package com.jczb.car.bean;import java.util.Date;import java.util.List;import android.R.integer;import android.R.integer;/** * 说明:段子内容实体 * 作者:丁国华 * 时间:2015年9月10日 10:41:43 */@SuppressWarnings("serial")public class Content extends Entity {		/** 内容表标识 */	private int uid;		/** 显示标题 */	private String title;		/** 视频或者图片路径 */	private String path;		/**详情*/	private String details;		/**频道类型*/	private String channelType;		/**频道名称*/	private String channelName;		/**作者*/	private String author;		/**是否推荐*/	private String isRecommend;		/**阅读或者播放数量*/	private int  browseNumber;		/**评论数*/	private int commentbrowseNumber;			/**赞数*/	private int praiseNumber;		/**踩数*/	private int treadNumber;		/**发布时间*/	private String issueTime;		/**是否收藏*/	private int isCollect;		/**关联视频*/	private List
Content; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getDetails() { return details; } public void setDetails(String details) { this.details = details; } public String getChannelType() { return channelType; } public void setChannelType(String channelType) { this.channelType = channelType; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getIsRecommend() { return isRecommend; } public void setIsRecommend(String isRecommend) { this.isRecommend = isRecommend; } public int getBrowseNumber() { return browseNumber; } public void setBrowseNumber(int browseNumber) { this.browseNumber = browseNumber; } public int getCommentbrowseNumber() { return commentbrowseNumber; } public void setCommentbrowseNumber(int commentbrowseNumber) { this.commentbrowseNumber = commentbrowseNumber; } public int getPraiseNumber() { return praiseNumber; } public void setPraiseNumber(int praiseNumber) { this.praiseNumber = praiseNumber; } public int getTreadNumber() { return treadNumber; } public void setTreadNumber(int treadNumber) { this.treadNumber = treadNumber; } public String getIssueTime() { return issueTime; } public void setIssueTime(String issueTime) { this.issueTime = issueTime; } public String getChannelName() { return channelName; } public void setChannelName(String channelName) { this.channelName = channelName; } public int getIsCollect() { return isCollect; } public void setIsCollect(int isCollect) { this.isCollect = isCollect; } public List
getContent() { return Content; } public void setContent(List
content) { Content = content; } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } }
      第二个实体contentVo,具体代码如下所示:        

package com.jczb.car.bean;import java.util.List;/** *说明: 内容集合,用于Json串的解析 *作者:丁国华 *时间:2015年9月10日 10:38:38 */@SuppressWarnings("serial")public class ContentVo extends Entity {	/** 服务器返回结果:true或false */	private String result;	/** 服务器返回的Json串解析为List结合 */	private List
Content; public String getResult() { return result; } public void setResult(String result) { this.result = result; } public List
getContent() { return Content; } public void setContent(List
content) { Content = content; } }
     接着,来编写我们的需要调用的接口方法,代码如下所示:

      

/**	 * 说明:发现	 * @user 丁国华	 * @date 2015-8-31 下午2:10:59	 */	public ContentVo discover(boolean isFirst, int contentVoId)			throws AppException {		ContentVo contentVo = null;		// 构建缓存文件的key		String key = "contentVo_" + contentVoId;		// 1.如果联网则首先从服务器获取数据		if (isNetworkConnected() &&(isReadDataCache(key) || isFirst)) {			try {				// 从服务器获取Content的集合				contentVo = ApiClient.discover(this);				// 如果能够获取到服务器中的数据则保存到本地缓存,只有保证数据不为空,且获取到的结果为true的时候才缓存到本地				if (contentVo != null && contentVo.getResult().equals("false")) {					contentVo.setCacheKey(key);					saveObject(contentVo, key);				}			} catch (AppException e) {				// 如果出现访问中途断网,则获取本地缓存中的数据				contentVo = (ContentVo) readObject(key);				// 如果本地缓存中数据为空,则抛出异常				if (contentVo == null) {					throw e;				}			}		}		// 2.如果未联网则从缓存中获取数据		else {			contentVo = (ContentVo) readObject(key);			if (contentVo == null) {				contentVo = new ContentVo();			}			return contentVo;		}		return contentVo;	}
       第三步,我们来编写我们的xml布局,具体代码如下所示:

      第四步,编写java类里面所需要的代码,如下所示:
package com.jczb.car.ui;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.EditText;import android.widget.ImageView;import android.widget.ListView;import android.widget.RelativeLayout;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import com.jczb.car.AppContext;import com.jczb.car.AppException;import com.jczb.car.R;import com.jczb.car.bean.Content;import com.jczb.car.bean.ContentVo;/** * 说明:发现功能页面 * 作者:丁国华 * 时间: 2015-9-2下午2:02:58 */public class DiscoveryActivity extends Activity implements OnClickListener,		OnItemClickListener {	//RelativeLayout rlFoundSearch;	//ImageView ivTuBiaoSearch;		// 声明用到的几个控件	private TextView etSearch;	private ImageView ivSearch;	private ListView lvHotChannel;	private RelativeLayout rlFoundSearchEmpty;	//private ImageView ivTuBiao;			/**解析发现接口用的实体类*/	private ContentVo contentVo = null;		/**用来填充ListView的List*/	private List
> data = new ArrayList
>(); /**用来获得服务器接口的发现内容集合*/ private List
discoverContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.discovery); findViewById(); // 初始化页面控件 initView(); /*跳转到搜索关键字的空白的页面*/ rlFoundSearchEmpty.setOnClickListener(this); //ivTuBiao.setOnClickListener(this); // 启动子线程,获取服务器数据 discoverThread.start(); } private void findViewById() { // TODO Auto-generated method stub rlFoundSearchEmpty=(RelativeLayout) findViewById(R.id.rl_search_id); //ivTuBiao=(ImageView) findViewById(R.id.iv_search_tubiao_id); } @Override public void onClick(View v) { switch (v.getId()) { /*case R.id.iv_search_tubiao_id: break;*/ case R.id.rl_search_id: Intent intentFoundSerch = new Intent(this,SearchResourceActivity.class); startActivity(intentFoundSerch); break; default: break; } } /** *说明:初始化控件和监听事件 *作者:丁国华 * 时间:2015-9-2 下午2:12:49 */ public void initView() { // 初始化控件 etSearch = (TextView) findViewById(R.id.et_seachkey_id); ivSearch = (ImageView) findViewById(R.id.iv_search_id); lvHotChannel = (ListView) findViewById(R.id.lv_hotchannel_id); //rlFoundSearch=(RelativeLayout)findViewById(R.id.rl_search_id); // 初始化监听事件 ivSearch.setOnClickListener(this); // ListView想要实现点击事件本Activity必须实现OnItemClickListener接口 lvHotChannel.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView
arg0, View arg1, int position, long arg3) { //点击item之后能够根据点击位置获取将要携带的参数跳转到搜索结果页 Intent intent = new Intent(DiscoveryActivity.this, VedioInfoActivity.class); intent.putExtra("channelType", discoverContent.get(position).getChannelType()); intent.putExtra("Id", discoverContent.get(position).getId()); startActivity(intent); } }); }; /** * 说明:从服务器端获取并加载数据到ListView中 * 作者: 丁国华 * 时间: 2015-9-2 下午2:54:27 */ public void loadData() { } /** * 定义一个线程等待 */ Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); // 需要根据线程中传递的msg中what的返回值进行判断 // 消息的what值为1,为空what为-1,异常为0 switch (msg.what) { case 1: //获取线程得到的服务器数据 contentVo = (ContentVo)msg.obj; discoverContent = contentVo.getContent(); //将数据赋给List
<>>集合 for (int i = 0; i< discoverContent.size(); i++) { Map
map = new HashMap
(); //map.put("Id", discoverContent.get(i).getId()); //map.put("channelType", discoverContent.get(i).getChannelType()); map.put("title", discoverContent.get(i).getTitle()); map.put("channelName", discoverContent.get(i).getChannelName()); data.add(map); } //定义填充ListView的Adapter并填充到ListView中 //String[]{}与map中填的名字必须保持一致 SimpleAdapter contentAdapter = new SimpleAdapter(DiscoveryActivity.this, data, R.layout.discovery_item,new String[]{"title","channelName"}, new int[]{R.id.tv_channelTopNews_id,R.id.tv_channelName_id}); lvHotChannel.setAdapter(contentAdapter); break; case -1: Toast.makeText(DiscoveryActivity.this, "数据为空!", Toast.LENGTH_LONG) .show(); break; case 0: Toast.makeText(DiscoveryActivity.this, "数据获取失败!", Toast.LENGTH_LONG) .show(); break; default: break; } } }; /** * 开启一个发现子线程 */ Thread discoverThread = new Thread(new Runnable() { @Override public void run() { Message msg = new Message(); // 获取全局对象Application AppContext appContext = (AppContext) getApplication(); try { // 获取服务器数据 contentVo = appContext.discover(true, 1); // 返回contentVo则将消息的what值为1,为空what为-1,异常为0 if (contentVo != null) { msg.what = 1; msg.obj = contentVo; } else { msg.what = -1; } } catch (AppException e) { msg.what = 0; e.printStackTrace(); } handler.sendMessage(msg); } }); /** * 说明:根据handler传过来的类型显示不同的Toast提示 * 作者:丁国华 * 时间:2015-9-2 下午3:53:30 */ public void showToast(int what) { switch (what) { case -1: Toast.makeText(DiscoveryActivity.this, "数据为空!", Toast.LENGTH_LONG) .show(); break; case 0: Toast.makeText(DiscoveryActivity.this, "数据获取失败!", Toast.LENGTH_LONG) .show(); default: break; } } @Override public void onItemClick(AdapterView
arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub }}

       到此,我们的发现这个功能的一条线就走下来了,最后,我们来看一下我们的运行效果,如下所示:

        

        小编寄语:发现的实现功能,小编就简单的介绍到这里,发现实现了,但是小编到现在还是云里雾里,不过没关系,小编会越挫越勇的,这就是生命的意义,还是那句话对于小编来说,既是挑战更是机遇,因为知识都是相通的,再者来说,在小编的程序人生中,留下最珍贵的记忆,虽然以后小编不一定从事安卓这个行业,代码世界里,很多种事,有的甜蜜,有的温馨,有的婉转成歌,有的绵延不息,在这些故事里,我们唯一的共通之处就是,某年,某月,某个波澜不惊的日子里,曾经很爱很爱你!爱你--这段实习的日子里,安卓带给小编的种种的惊喜。在 下篇博文中小将和小伙伴们一起来分享,如何输入关键字,搜索出相应内容,敬请期待`(*∩_∩*)′!

你可能感兴趣的文章
[置顶].NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB
查看>>
Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(三)
查看>>
iOS Touch ID 简易开发教程
查看>>
结构体类型指针做函数参数(C++)
查看>>
Akka笔记之消息传递
查看>>
带你实现开发者头条(一) 启动页实现
查看>>
Android Listview中Button按钮点击事件冲突解决办法
查看>>
【技术篇】SQL的四种连接-左外连接、右外连接、内连接、全连接
查看>>
可翻折的TextViewExpandableTextView
查看>>
【软件工程】1.软件工程概述
查看>>
IOS学习和总结KVO
查看>>
Java EE7和Maven工程入门(2)
查看>>
MVP 模式在 Android 中的使用
查看>>
《数据结构》—— 队列
查看>>
hadoop 3.0 集群部署,超详细-Ali0th
查看>>
MySQL数据库MyISAM存储引擎转为Innodb
查看>>
我的友情链接
查看>>
在OpenSUSE上配置Apache+MySQL+PHP(写给自己看的笔记)
查看>>
初识Nginx
查看>>
Android WebView 缓存处理
查看>>