android做新闻客户端用到得第三包
2015-08-31 21:10
603 查看
在处理的数据越来越大、越多的时候,以前自己写的那套小空间已经不在适合了,而且封装性也总不尽完美,所以第三包的运用就出现了,首先是网络获取图片,以前自己的图片地址从死地址到网络少量JSON数据的解析,还看不出什么差别,到后面越来越多的图片的时候,加载图片就显示不尽人意了,第一个第三方包是picasso,只是简单的看了,感觉和自己封装的都差不多,只不过自己只加了文件缓存和那个LRUCache缓存,能作为第三方包,功能肯定是强大的,后面就用的volley框架,感觉效率的提升很明显,他里面至少会开启2个死线程,无限的循环,一个是缓存的线程,一个是网络取数据的线程,下来刷新,上拉加载更多用的是很常见XListView,图片的异步取数据,然后自动滚动显示的ImageSlider,侧滑的slidingMenu,用这些工具,差不多做了半个新闻客户端的主要一些效果,其中主要的操作时联网取数据,然后JSON解析,Tab和viewPager的结合使用,防止图片错位等,ListView中的item显示多种效果。上一张效果图:
其中遇到一个以后肯定会遇到的问题,就是第三方jar包重复的问题,很多都是V4包或者解析JSON数据的包:Gson、fastjson等重复,因为在第三方包里面已经用到了,所以我们再添加就会出现重复的问题,可以直接删掉,或者点工程右键的最后一排(Preperties),然后选java buid path,选中它里面的第三个,如果有报错的删了就行,有时候就删不掉,我今天就是,一直说已经打开,然后直接关掉开发的工具,去工作空间删的。
中间解析数据的时候我一开始用的GSON解析,感觉这个方式挺好的,但是第一次解析完,遇到了情况,应该是运气好,一运行出来没有崩溃,然后上拉加载更多就崩溃了,后来经人指点原来我们GSON解析的那个Bean类里面的设置的必须是你解析的那个数据源里面,每个对象都有的,也就是说那个Bean类里面是公共的部分,你如果添加有些里面有这个地址的,有些却没有的,那么不用看,肯定会报错,就像上图中的,横排的3张图,和一张图的item中就有差别,我一开始也想过判断它不为空我就去添加数据,唯恐我就不添加数据,但是Gson确不干,就是要说,解析对象里面有错直接崩掉,我最后选择的还是系统的解析方式。
界面的话,采用的是一个Activity4个fragment,本来想一个fragment解决;但是后来发现这个和viewpager冲突,因为我左右滑动下一页的时候,要的是一个界面,所以最后被逼无奈就复制了3个fragment出来,做4个fragment算了,或许2个fragment可以解决,滑动到下一页,就只刷新数据源,添加到适配器去显示,至少左右滑的时候能保证有界面出来,这个估计常见的就是图片错位,新闻重复方面的问题了。另外我的侧滑设置在左边,只能从边缘处滑出来,否则会和viewPager的滑动冲突。一开始一个fragment的时候我想用广播通知TAB的fragment和Viewpager的fragment状态改变,后面想了下,估计是自己想疯了,fragment划过去都和activity已经解绑了,还能收到才怪了。
在这里面还用到了一个异常的捕捉,我用的很简单捕捉就完了,啥都没处理,就是防止程序因为取数据,或者网络超时什么的直接给你崩溃掉,就是用一个类继承异常的父类Exception:
然后如下:
下面是我捕获的地方,当然还得有接口回调取通知我们的界面:
然后就是异步线程开启调用的地方处理就行了,至于实现接口后处不处理随个人了:
新闻的话,要缓存的话就用SharedPrefrences缓存下,因为新闻看了一遍,或许看都没看,都不会再去看了,没要浪费内存区存储。大概差不多这么多把。
其中遇到一个以后肯定会遇到的问题,就是第三方jar包重复的问题,很多都是V4包或者解析JSON数据的包:Gson、fastjson等重复,因为在第三方包里面已经用到了,所以我们再添加就会出现重复的问题,可以直接删掉,或者点工程右键的最后一排(Preperties),然后选java buid path,选中它里面的第三个,如果有报错的删了就行,有时候就删不掉,我今天就是,一直说已经打开,然后直接关掉开发的工具,去工作空间删的。
中间解析数据的时候我一开始用的GSON解析,感觉这个方式挺好的,但是第一次解析完,遇到了情况,应该是运气好,一运行出来没有崩溃,然后上拉加载更多就崩溃了,后来经人指点原来我们GSON解析的那个Bean类里面的设置的必须是你解析的那个数据源里面,每个对象都有的,也就是说那个Bean类里面是公共的部分,你如果添加有些里面有这个地址的,有些却没有的,那么不用看,肯定会报错,就像上图中的,横排的3张图,和一张图的item中就有差别,我一开始也想过判断它不为空我就去添加数据,唯恐我就不添加数据,但是Gson确不干,就是要说,解析对象里面有错直接崩掉,我最后选择的还是系统的解析方式。
界面的话,采用的是一个Activity4个fragment,本来想一个fragment解决;但是后来发现这个和viewpager冲突,因为我左右滑动下一页的时候,要的是一个界面,所以最后被逼无奈就复制了3个fragment出来,做4个fragment算了,或许2个fragment可以解决,滑动到下一页,就只刷新数据源,添加到适配器去显示,至少左右滑的时候能保证有界面出来,这个估计常见的就是图片错位,新闻重复方面的问题了。另外我的侧滑设置在左边,只能从边缘处滑出来,否则会和viewPager的滑动冲突。一开始一个fragment的时候我想用广播通知TAB的fragment和Viewpager的fragment状态改变,后面想了下,估计是自己想疯了,fragment划过去都和activity已经解绑了,还能收到才怪了。
在这里面还用到了一个异常的捕捉,我用的很简单捕捉就完了,啥都没处理,就是防止程序因为取数据,或者网络超时什么的直接给你崩溃掉,就是用一个类继承异常的父类Exception:
然后如下:
public class MsgException extends Exception { public MsgException(String msg) { super(msg); } }
下面是我捕获的地方,当然还得有接口回调取通知我们的界面:
public String httpGetByJson(String url) throws MsgException { String contentString = ""; try { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); // 设置请求超时15秒钟 HttpConnectionParams.setConnectionTimeout(new BasicHttpParams(), 15000); // 设置等待数据超时时间10秒钟 HttpConnectionParams.setSoTimeout(new BasicHttpParams(), 10000); HttpResponse responese = httpClient.execute(httpGet); int n = responese.getStatusLine().getStatusCode(); if (n == 200) { contentString = EntityUtils.toString(responese.getEntity()); //SharedPrefrences暂时存储最新的新闻
setSharedPrefrenceJSON(url, contentString); return contentString; } else { contentString = "服务器连接异常"; } } catch (IOException e) {
//这个就是我捕获的异常 <span style="color:#ff0000;">throw new MsgException("网络连接异常,请检查你的网络!"); </span> } return contentString; }
然后就是异步线程开启调用的地方处理就行了,至于实现接口后处不处理随个人了:
new AsyncTask<String, Void, String>() { protected String doInBackground(String... params) { String line = ""; try { line = httpGetByJson(params[0]); } catch (MsgException e) { e.printStackTrace();
//用的接口回调来处理网络获取出错的异常 mBackMsgByAsynctask.exceptionMsg(e.getMessage()); } return line; }
新闻的话,要缓存的话就用SharedPrefrences缓存下,因为新闻看了一遍,或许看都没看,都不会再去看了,没要浪费内存区存储。大概差不多这么多把。
相关文章推荐
- Android的Activity跳转动画各种效果整理
- Android - 卡片式布局 Fragment 详细回顾(一)
- android中Fragment和Actvity相互跳转
- Android 仿qq聊天界面之一
- (Android Studio)添加文本框
- android开发中调用手机的豌豆荚、应用宝等市场进行评分操作,以及分享功能
- Android客户端通过socket与服务器通信
- (4.2.16.5)Android判断应用或Activity是否存在
- android studio一个module依赖另外一个module
- 0831Android基础自定义Notification+仿QQ聊天界面的小Demo(上)
- android 自定义View--漂亮的倒计时功能CountDownView
- Android 开发最佳实践
- Android 话筒、听筒、扬声器
- 关于Android中的输入法
- Android Drawable系列(1):自定义背景以及注意事项
- Android ViewPager禁止左右滑动以及点击选项卡切换闪烁的问题
- android:configChanges属性
- Android触摸屏事件派发机制详解与源码分析一(View篇)
- Android--JNI错误解决方法
- Android 色板