OSChina客户端源码学习(1)--Android与Server的交互
2015-07-13 19:47
651 查看
这里主要针对“综合”这个选项卡下的“资讯”模块为例子,对核心代码进行解读。
准备工作:参考我的另外一篇博客
/article/9147933.html
然后点击下面的类
Class AsyncHttpResponseHandler
第一步:定义AsyncHttpResponseHandler,该handler对象将作为Http请求的参数
第二步:发送请求数据
发送数据主要是调用 AsyncHttpClient对象的get方法,第一步定义的handler作为参数
第三步:解析返回结果(在第一步的红色代码,开启一个异步线程ParserTask)
其中继承AsyncTask必须实现两个方法:
1.doInBackground 一般在该方法里处理比较耗时的操作
2.onPostExecute 一般在该方法里更新UI
关于UI更新的异步操作问题以后会详细归纳出来。这里点到为止。
具体的解析过程,用到了XStream框架。核心代码:
obj = (T) xmStream.fromXML(is);
具体用法我会在后面的博客中继续更新。
总结: 学习了这种用 AsyncHttpClient 和 AsyncHttpResponseHandler 来进行Android端和Server端交互的方式。
准备工作:参考我的另外一篇博客
/article/9147933.html
然后点击下面的类
Class AsyncHttpResponseHandler
第一步:定义AsyncHttpResponseHandler,该handler对象将作为Http请求的参数
protected AsyncHttpResponseHandler mHandler = new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBytes) { if (mCurrentPage == 0 && needAutoRefresh()) { AppContext.putToLastRefreshTime(getCacheKey(), StringUtils.getCurTimeStr()); } if (isAdded()) { if (mState == STATE_REFRESH) { onRefreshNetworkSuccess(); } executeParserTask(responseBytes); } } @Override public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) { if (isAdded()) { readCacheData(getCacheKey()); } } };
第二步:发送请求数据
发送数据主要是调用 AsyncHttpClient对象的get方法,第一步定义的handler作为参数
protected void sendRequestData() { OSChinaApi.getNewsList(mCatalog, mCurrentPage, mHandler); } public static void getNewsList(int catalog, int page, AsyncHttpResponseHandler handler) { RequestParams params = new RequestParams(); params.put("catalog", catalog); params.put("pageIndex", page); params.put("pageSize", AppContext.PAGE_SIZE); if (catalog == NewsList.CATALOG_WEEK) { params.put("show", "week"); } else if (catalog == NewsList.CATALOG_MONTH) { params.put("show", "month"); } ApiHttpClient.get("action/api/news_list", params, handler); }
第三步:解析返回结果(在第一步的红色代码,开启一个异步线程ParserTask)
其中继承AsyncTask必须实现两个方法:
1.doInBackground 一般在该方法里处理比较耗时的操作
2.onPostExecute 一般在该方法里更新UI
关于UI更新的异步操作问题以后会详细归纳出来。这里点到为止。
具体的解析过程,用到了XStream框架。核心代码:
obj = (T) xmStream.fromXML(is);
具体用法我会在后面的博客中继续更新。
class ParserTask extends AsyncTask<Void, Void, String> { private final byte[] reponseData; private boolean parserError; private List<T> list; public ParserTask(byte[] data) { this.reponseData = data; } @Override protected String doInBackground(Void... params) { try { ListEntity<T> data = parseList(new ByteArrayInputStream( reponseData)); new SaveCacheTask(getActivity(), data, getCacheKey()).execute(); list = data.getList(); if (list == null) { ResultBean resultBean = XmlUtils.toBean(ResultBean.class, reponseData); if (resultBean != null) { mResult = resultBean.getResult(); } } } catch (Exception e) { e.printStackTrace(); parserError = true; } return null; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); if (parserError) { readCacheData(getCacheKey()); } else { executeOnLoadDataSuccess(list); executeOnLoadFinish(); } } }
总结: 学习了这种用 AsyncHttpClient 和 AsyncHttpResponseHandler 来进行Android端和Server端交互的方式。
相关文章推荐
- android paint的抗锯齿效果
- Android破解之Lic文件加密程序(首例)
- Android early suspend/late resume
- Android实现Session保持
- Android实现图片放大缩小
- Android系统各版本及代号
- 了解 uri, content provide,包括 data android:host,android:scheme
- Android ViewPager放入多个XML如何监听其的控件
- androidStudio 又添一个新武器 findBugs
- android固定头部和侧边表格实现
- 每位Android开发人员不容错过的十大实用工具
- Android清单文件详解(一) ---- 一切从<manifest>开始
- 平安科技移动开发二队技术周报(第十期)
- Android 自绘TextView解决提前换行问题,支持图文混排
- Android-多媒体之MediaPlayer原理
- Android 5.0 添加系统服务后,启动的时候报安全错误
- android 开机自启(holle word)
- Android 获取AndroidManifest 文件 versionCode和versionName属性
- Android Activity之间传递图片(Bitmap)的方法
- Android studio在真机上进行调试