okhttp 请求list数据实例
2024-08-29 03:20:41
public class DataBean { /** * id : 61684 * movieName : 《猜火车2》先导预告片 * coverImg : http://img31.mtime.cn/mg/2016/07/26/143142.64770465.jpg * movieId : 228230 * url : http://vfx.mtime.cn/Video/2016/07/26/mp4/160726074707321432_480.mp4 * hightUrl : http://vfx.mtime.cn/Video/2016/07/26/mp4/160726074707321432.mp4 * videoTitle : 猜火车2 先导预告片 * videoLength : 46 * rating : 0 * type : ["剧情"] * summary : 苏格兰四兄弟回来了! */ private List<ItemData> trailers; public void setTrailers(List<ItemData> trailers) { this.trailers = trailers; } public List<ItemData> getTrailers() { return trailers; } public static class ItemData { private int id; private String movieName; private String coverImg; private int movieId; private String url; private String hightUrl; private String videoTitle; private int videoLength; private int rating; private String summary; private List<String> type; get set.... } } public class CacheUtils { /** * 保持数据 * @param context * @param key * @param values */ public static void putString(Context context,String key,String values){ SharedPreferences sharedPreferences = context.getSharedPreferences("atguigu",Context.MODE_PRIVATE); sharedPreferences.edit().putString(key,values).commit(); } /** * 得到缓存的数据 * @param context * @param key * @return */ public static String getString(Context context,String key){ SharedPreferences sharedPreferences = context.getSharedPreferences("atguigu",Context.MODE_PRIVATE); return sharedPreferences.getString(key,""); } } public class OKHttpListActivity extends Activity{ private static final String TAG = OKHttpListActivity.class.getSimpleName(); private ListView listView; private ProgressBar progressBar; private TextView tv_nodata; private OKHttpListAdapter adapter; private String url; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); getDataFromNet(); } private void getDataFromNet() { url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api"; //得到缓存的数据 String saveJson = CacheUtils.getString(this,url); if(!TextUtils.isEmpty(saveJson)){ processData(saveJson); } OkHttpUtils .post() .url(url) .id(100) .build() .execute(new MyStringCallback()); } private void initView() { setContentView(R.layout.activity_okhttplist); tv_nodata = (TextView) findViewById(R.id.tv_nodata); listView = (ListView) findViewById(R.id.listview); progressBar = (ProgressBar) findViewById(R.id.progressBar); } public class MyStringCallback extends StringCallback { @Override public void onBefore(Request request, int id) { setTitle("loading..."); } @Override public void onAfter(int id) { setTitle("Sample-okHttp"); } @Override public void onError(Call call, Exception e, int id) { e.printStackTrace(); tv_nodata.setVisibility(View.VISIBLE); } @Override public void onResponse(String response, int id) { Log.e(TAG, "onResponse:complete"); tv_nodata.setVisibility(View.GONE); switch (id) { case 100: Toast.makeText(OKHttpListActivity.this, "http", Toast.LENGTH_SHORT).show(); break; case 101: Toast.makeText(OKHttpListActivity.this, "https", Toast.LENGTH_SHORT).show(); break; } //解析数据和显示数据 if(response != null){ //缓存数据 CacheUtils.putString(OKHttpListActivity.this,url,response); processData(response); } } @Override public void inProgress(float progress, long total, int id) { Log.e(TAG, "inProgress:" + progress); } } /** * 解析和显示数据 * @param json */ private void processData(String json) { //解析数据 DataBean dataBean = parsedJson(json); List<DataBean.ItemData> datas = dataBean.getTrailers(); if(datas != null && datas.size() >0){ //有数据 tv_nodata.setVisibility(View.GONE); //显示适配器 adapter = new OKHttpListAdapter(OKHttpListActivity.this,datas); listView.setAdapter(adapter); }else{ //没有数据 tv_nodata.setVisibility(View.VISIBLE); } progressBar.setVisibility(View.GONE); } /** * 解析json数据 * * @param response * @return */ private DataBean parsedJson(String response) { DataBean dataBean = new DataBean(); try { JSONObject jsonObject = new JSONObject(response); JSONArray jsonArray = jsonObject.optJSONArray("trailers"); if (jsonArray != null && jsonArray.length() > 0) { List<DataBean.ItemData> trailers = new ArrayList<>(); dataBean.setTrailers(trailers); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObjectItem = (JSONObject) jsonArray.get(i); if (jsonObjectItem != null) { DataBean.ItemData mediaItem = new DataBean.ItemData(); String movieName = jsonObjectItem.optString("movieName");//name mediaItem.setMovieName(movieName); String videoTitle = jsonObjectItem.optString("videoTitle");//desc mediaItem.setVideoTitle(videoTitle); String imageUrl = jsonObjectItem.optString("coverImg");//imageUrl mediaItem.setCoverImg(imageUrl); String hightUrl = jsonObjectItem.optString("hightUrl");//data mediaItem.setHightUrl(hightUrl); //把数据添加到集合 trailers.add(mediaItem); } } } } catch (JSONException e) { e.printStackTrace(); } return dataBean; } } public class OKHttpListAdapter extends BaseAdapter { private final Context context; private final List<DataBean.ItemData> datas; public OKHttpListAdapter(Context context,List<DataBean.ItemData> datas){ this.context = context; this.datas = datas; } @Override public int getCount() { return datas.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if(convertView ==null){ convertView = View.inflate(context, R.layout.item_okhttp_list_image,null); viewHolder = new ViewHolder(); viewHolder.iv_icon = (ImageView) convertView.findViewById(R.id.iv_icon); viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); viewHolder.tv_desc = (TextView) convertView.findViewById(R.id.tv_desc); convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); } //根据位置得到数据 DataBean.ItemData itemData = datas.get(position); viewHolder.tv_name.setText(itemData.getMovieName()); viewHolder.tv_desc.setText(itemData.getVideoTitle()); //在列表中使用okhttp-utils请求图片 OkHttpUtils .get()// .url(itemData.getCoverImg())// .tag(this)// .build()// .connTimeOut(20000) .readTimeOut(20000) .writeTimeOut(20000) .execute(new BitmapCallback() { @Override public void onError(Call call, Exception e, int id) { // tv_result.setText("onError:" + e.getMessage()); } @Override public void onResponse(Bitmap bitmap, int id) { Log.e("TAG", "onResponse:complete"); viewHolder.iv_icon.setImageBitmap(bitmap); } }); return convertView; } static class ViewHolder{ ImageView iv_icon; TextView tv_name; TextView tv_desc; } }
最新文章
- Mysql性能优化一
- ASP.NET MVC之视图生成URL(二)
- 移动端开发之APP消息推送
- Codeforces Round #325 (Div. 2) D bfs
- UliPad双击没反应,UliPad打不开
- 游戏 gui button
- redis.conf详解
- 屏蔽页面js报的错误
- UOJ 08 Quine 是在下输了
- golang资料整理 (整理 中...)
- java.util.concurrent.atomic 类包详解
- UVa 474 - Heads / Tails Probability
- python调用SOA服务
- bzoj 1835: [ZJOI2010]base 基站选址
- 什么是分布式锁及正确使用redis实现分布式锁
- [daily][emacs][go] 配置emacs go-mode的编辑环境以及环境变量问题
- Sqlite3数据库查看工具
- Day03(黑客成长日记)
- bug: &#39;\xff&#39; 转换成-1 而不是255
- C#winform的textbox怎么设置滚动条
热门文章
- Poj2826 An Easy Problem
- mac为photoshop添加字体
- [Sqlite]--&;gt;嵌入式数据库事务理解以及实例操作
- 33:字符统计SumOfCharactors
- 淘宝数据库OceanBase SQL编译器部分 源代码阅读--解析SQL语法树
- H5网页判断手机横屏或是竖屏
- 我眼中的Oracle Database Software 和 Oracle Database
- C#与Java在修饰符上的不同
- golang中字符串的查找方法小结
- SAP Sybase SQLAnywhere[ASA]数据库中数据行的存储机制