1. public class DataBean {
  2.  
  3. /**
  4. * id : 61684
  5. * movieName : 《猜火车2》先导预告片
  6. * coverImg : http://img31.mtime.cn/mg/2016/07/26/143142.64770465.jpg
  7. * movieId : 228230
  8. * url : http://vfx.mtime.cn/Video/2016/07/26/mp4/160726074707321432_480.mp4
  9. * hightUrl : http://vfx.mtime.cn/Video/2016/07/26/mp4/160726074707321432.mp4
  10. * videoTitle : 猜火车2 先导预告片
  11. * videoLength : 46
  12. * rating : 0
  13. * type : ["剧情"]
  14. * summary : 苏格兰四兄弟回来了!
  15. */
  16.  
  17. private List<ItemData> trailers;
  18.  
  19. public void setTrailers(List<ItemData> trailers) {
  20. this.trailers = trailers;
  21. }
  22.  
  23. public List<ItemData> getTrailers() {
  24. return trailers;
  25. }
  26.  
  27. public static class ItemData {
  28. private int id;
  29. private String movieName;
  30. private String coverImg;
  31. private int movieId;
  32. private String url;
  33. private String hightUrl;
  34. private String videoTitle;
  35. private int videoLength;
  36. private int rating;
  37. private String summary;
  38. private List<String> type;
  39.  
  40. get set....
  41. }
  42. }
  43.  
  44. public class CacheUtils {
  45.  
  46. /**
  47. * 保持数据
  48. * @param context
  49. * @param key
  50. * @param values
  51. */
  52. public static void putString(Context context,String key,String values){
  53. SharedPreferences sharedPreferences = context.getSharedPreferences("atguigu",Context.MODE_PRIVATE);
  54. sharedPreferences.edit().putString(key,values).commit();
  55. }
  56.  
  57. /**
  58. * 得到缓存的数据
  59. * @param context
  60. * @param key
  61. * @return
  62. */
  63. public static String getString(Context context,String key){
  64. SharedPreferences sharedPreferences = context.getSharedPreferences("atguigu",Context.MODE_PRIVATE);
  65. return sharedPreferences.getString(key,"");
  66. }
  67. }
  68.  
  69. public class OKHttpListActivity extends Activity{
  70. private static final String TAG = OKHttpListActivity.class.getSimpleName();
  71. private ListView listView;
  72. private ProgressBar progressBar;
  73. private TextView tv_nodata;
  74. private OKHttpListAdapter adapter;
  75. private String url;
  76.  
  77. @Override
  78. protected void onCreate(Bundle savedInstanceState) {
  79. super.onCreate(savedInstanceState);
  80. initView();
  81. getDataFromNet();
  82.  
  83. }
  84.  
  85. private void getDataFromNet() {
  86. url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
  87. //得到缓存的数据
  88. String saveJson = CacheUtils.getString(this,url);
  89. if(!TextUtils.isEmpty(saveJson)){
  90. processData(saveJson);
  91. }
  92.  
  93. OkHttpUtils
  94. .post()
  95. .url(url)
  96. .id(100)
  97. .build()
  98. .execute(new MyStringCallback());
  99. }
  100.  
  101. private void initView() {
  102. setContentView(R.layout.activity_okhttplist);
  103. tv_nodata = (TextView) findViewById(R.id.tv_nodata);
  104. listView = (ListView) findViewById(R.id.listview);
  105. progressBar = (ProgressBar) findViewById(R.id.progressBar);
  106. }
  107.  
  108. public class MyStringCallback extends StringCallback {
  109. @Override
  110. public void onBefore(Request request, int id) {
  111. setTitle("loading...");
  112. }
  113.  
  114. @Override
  115. public void onAfter(int id) {
  116. setTitle("Sample-okHttp");
  117. }
  118.  
  119. @Override
  120. public void onError(Call call, Exception e, int id) {
  121. e.printStackTrace();
  122. tv_nodata.setVisibility(View.VISIBLE);
  123. }
  124.  
  125. @Override
  126. public void onResponse(String response, int id) {
  127. Log.e(TAG, "onResponse:complete");
  128. tv_nodata.setVisibility(View.GONE);
  129.  
  130. switch (id) {
  131. case 100:
  132. Toast.makeText(OKHttpListActivity.this, "http", Toast.LENGTH_SHORT).show();
  133. break;
  134. case 101:
  135. Toast.makeText(OKHttpListActivity.this, "https", Toast.LENGTH_SHORT).show();
  136. break;
  137. }
  138. //解析数据和显示数据
  139. if(response != null){
  140. //缓存数据
  141. CacheUtils.putString(OKHttpListActivity.this,url,response);
  142. processData(response);
  143.  
  144. }
  145. }
  146.  
  147. @Override
  148. public void inProgress(float progress, long total, int id) {
  149. Log.e(TAG, "inProgress:" + progress);
  150. }
  151. }
  152.  
  153. /**
  154. * 解析和显示数据
  155. * @param json
  156. */
  157. private void processData(String json) {
  158.  
  159. //解析数据
  160. DataBean dataBean = parsedJson(json);
  161. List<DataBean.ItemData> datas = dataBean.getTrailers();
  162.  
  163. if(datas != null && datas.size() >0){
  164. //有数据
  165. tv_nodata.setVisibility(View.GONE);
  166. //显示适配器
  167. adapter = new OKHttpListAdapter(OKHttpListActivity.this,datas);
  168. listView.setAdapter(adapter);
  169. }else{
  170. //没有数据
  171. tv_nodata.setVisibility(View.VISIBLE);
  172. }
  173.  
  174. progressBar.setVisibility(View.GONE);
  175. }
  176.  
  177. /**
  178. * 解析json数据
  179. *
  180. * @param response
  181. * @return
  182. */
  183. private DataBean parsedJson(String response) {
  184. DataBean dataBean = new DataBean();
  185. try {
  186. JSONObject jsonObject = new JSONObject(response);
  187. JSONArray jsonArray = jsonObject.optJSONArray("trailers");
  188. if (jsonArray != null && jsonArray.length() > 0) {
  189. List<DataBean.ItemData> trailers = new ArrayList<>();
  190. dataBean.setTrailers(trailers);
  191. for (int i = 0; i < jsonArray.length(); i++) {
  192.  
  193. JSONObject jsonObjectItem = (JSONObject) jsonArray.get(i);
  194.  
  195. if (jsonObjectItem != null) {
  196.  
  197. DataBean.ItemData mediaItem = new DataBean.ItemData();
  198.  
  199. String movieName = jsonObjectItem.optString("movieName");//name
  200. mediaItem.setMovieName(movieName);
  201.  
  202. String videoTitle = jsonObjectItem.optString("videoTitle");//desc
  203. mediaItem.setVideoTitle(videoTitle);
  204.  
  205. String imageUrl = jsonObjectItem.optString("coverImg");//imageUrl
  206. mediaItem.setCoverImg(imageUrl);
  207.  
  208. String hightUrl = jsonObjectItem.optString("hightUrl");//data
  209. mediaItem.setHightUrl(hightUrl);
  210.  
  211. //把数据添加到集合
  212. trailers.add(mediaItem);
  213. }
  214. }
  215. }
  216.  
  217. } catch (JSONException e) {
  218. e.printStackTrace();
  219. }
  220. return dataBean;
  221. }
  222.  
  223. }
  224.  
  225. public class OKHttpListAdapter extends BaseAdapter {
  226.  
  227. private final Context context;
  228. private final List<DataBean.ItemData> datas;
  229.  
  230. public OKHttpListAdapter(Context context,List<DataBean.ItemData> datas){
  231. this.context = context;
  232. this.datas = datas;
  233. }
  234. @Override
  235. public int getCount() {
  236. return datas.size();
  237. }
  238.  
  239. @Override
  240. public Object getItem(int position) {
  241. return null;
  242. }
  243.  
  244. @Override
  245. public long getItemId(int position) {
  246. return 0;
  247. }
  248.  
  249. @Override
  250. public View getView(int position, View convertView, ViewGroup parent) {
  251. final ViewHolder viewHolder;
  252. if(convertView ==null){
  253. convertView = View.inflate(context, R.layout.item_okhttp_list_image,null);
  254. viewHolder = new ViewHolder();
  255. viewHolder.iv_icon = (ImageView) convertView.findViewById(R.id.iv_icon);
  256. viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
  257. viewHolder.tv_desc = (TextView) convertView.findViewById(R.id.tv_desc);
  258. convertView.setTag(viewHolder);
  259.  
  260. }else{
  261. viewHolder = (ViewHolder) convertView.getTag();
  262. }
  263.  
  264. //根据位置得到数据
  265. DataBean.ItemData itemData = datas.get(position);
  266. viewHolder.tv_name.setText(itemData.getMovieName());
  267. viewHolder.tv_desc.setText(itemData.getVideoTitle());
  268.  
  269. //在列表中使用okhttp-utils请求图片
  270. OkHttpUtils
  271. .get()//
  272. .url(itemData.getCoverImg())//
  273. .tag(this)//
  274. .build()//
  275. .connTimeOut(20000)
  276. .readTimeOut(20000)
  277. .writeTimeOut(20000)
  278. .execute(new BitmapCallback() {
  279. @Override
  280. public void onError(Call call, Exception e, int id) {
  281. // tv_result.setText("onError:" + e.getMessage());
  282. }
  283.  
  284. @Override
  285. public void onResponse(Bitmap bitmap, int id) {
  286. Log.e("TAG", "onResponse:complete");
  287. viewHolder.iv_icon.setImageBitmap(bitmap);
  288. }
  289. });
  290.  
  291. return convertView;
  292. }
  293.  
  294. static class ViewHolder{
  295. ImageView iv_icon;
  296. TextView tv_name;
  297. TextView tv_desc;
  298. }
  299. }

okhttp 请求list数据实例的更多相关文章

  1. Okhttp 请求流程梳理

    最近在看 Okhttp 的源码.不得不说源码设计的很巧妙,从中能学到很多.其实网上关于 Okhttp 的文章已经很多了,自己也看了很多.但是俗话说得好,好记性不如烂笔头,当你动手的时候,你会发现你在看 ...

  2. Android之三种网络请求解析数据(最佳案例)

    AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...

  3. Easyui设置动态表格,动态导出数据实例,附Demo

    最近开发的过程中碰到一个客户提出的需求,一个指定的页面导出需要提供一个弹出页面选择列表页面需要显示的列,页面确认之后需要修改列表页面显示的表格,导出的数据也需要同步变化. 总结一下可以称为一个列表数据 ...

  4. Datatables插件1.10.15版本服务器处理模式ajax获取分页数据实例解析

    一.问题描述 前端需要使用表格来展示数据,找了一些插件,最后确定使用dataTables组件来做. 后端的分页接口已经写好了,不能修改.接口需要传入页码(pageNumber)和页面显示数据条数(pa ...

  5. json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例

    json-lib-2.4-jdk15.jar所需全部JAR包.rar  java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar  ...

  6. ajaxSubmit请求返回数据成功,但是不执行success回调函数

    最近项目涉及到附件上传就头痛,一直在用plupload插件在做...ie9偶尔抽风但还是可以的... 然后有个需求,表格每行都有个上传按钮,页面多上传按钮. 一.开始的时候,用plupload做的,多 ...

  7. JSONP跨域jQuery处理整理(附天气数据实例)

    写在前面 跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨 ...

  8. GoWeb开发_Iris框架讲解(二):Get、Post、Put等请求及数据返回格式

    数据请求方式的分类 所有的项目中使用的请求都遵循HTTP协议标准,HTTP协议经过了1.0和1.1两个版本的发展. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP ...

  9. (转载)Android之三种网络请求解析数据(最佳案例)

    [置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报  分类: Gson.Gson解析(1)  版权声明:本文为博主原创 ...

随机推荐

  1. git设置远程仓库地址

    方法有三种: 1.修改命令:git remote set-url origin [url] 2.先删除后添加: git remote rm origin git remote add origin [ ...

  2. 计算机网络自顶向下第三章传输层二TCP

    TCP 全双工 A-B,B-A 点对点 一对一的 TCP连接建立过程 客户首先发送一个特殊的TCP报文段,服务器用另一个特殊的TCP报文段来相应,最后,客户再用第三个特殊的报文段作为相应,前两个报文段 ...

  3. hadoop datanode节点超时时间设置

    datanode进程死亡或者网络故障造成datanode无法与namenode通信,namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长. HDFS默认的超时时长为10分 ...

  4. 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之静态页面

    一.引言 接着上一篇,京东个人中心的所有功能数据分析完成之后,现在需要把静态页面完成,实现过程中要用到的技术有:Bootstrap.html5表单新特性等.除此之外,还要利用Node.js的Expre ...

  5. 2017.2.20 activiti实战--第一章--认识Activiti

    学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...

  6. 在windows搭建jenkins測试环境

    jenkins 搭建好开发环境必备之中的一个,简单易用,搭建測试平台非常有帮助,不知道的都能够了解一下 官网下载地址 http://jenkins-ci.org/ 我是下载window版本号的 安装有 ...

  7. mysql启动參数(/etc/my.cnf)具体解释汇总

    在linux以下的/etc/my.cnf的參数具体解释汇总 MYSQL–my.cnf配置中文具体解释 basedir = path   使用给定文件夹作为根文件夹(安装文件夹). character- ...

  8. EMI-CLK信号串电阻并电容

    一般DMIC的CLK都会EMI超标,所以看到的案子这个DMIC CLK信号都会源端串接电阻和并电容 1,串电阻是为了信号的完整性,考虑到匹配的,一般说来这个电阻不是固定的,要随实际的PCB的走线的阻抗 ...

  9. inflate, findViewById与setContentView的差别与联系

    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...

  10. MagicalRecord使用教程【转载】

    原文地址:http://www.ithao123.cn/content-96403.html 下面是在xcode5.1下ARC环境中的使用教程 1. 将 MagicalRecord 文件夹拖入到工程文 ...