1.将要的取得的json数据格式如下:



我们封装之前的类用google提供的JSONArray和JSONObject类对json字符串进行解析。

对于姚明显示每一条数据,我们封装了一个类如下:

  1. public class Message {
  2. private String msg = null,msgId = null,phone_md5 = null;
  3. public String getMsg() {
  4. return msg;
  5. }
  6. public void setMsg(String msg) {
  7. this.msg = msg;
  8. }
  9. public String getMsgId() {
  10. return msgId;
  11. }
  12. public void setMsgId(String msgId) {
  13. this.msgId = msgId;
  14. }
  15. public String getPhone_md5() {
  16. return phone_md5;
  17. }
  18. public void setPhone_md5(String phone_md5) {
  19. this.phone_md5 = phone_md5;
  20. }
  21. public Message(String msgId, String msg, String phone_md5) {
  22. this.msg = msg;
  23. this.msgId = msgId;
  24. this.phone_md5 = phone_md5;
  25. }
  26. }

这个类简单封装了将要显示的消息。

2.我们要实现把json字符串的数据存进有Message类list中。具体实现如下:

  1. public class Timeline {
  2. public Timeline(String phone_md5,String token,int page,int perpage,
  3. final SuccessCallback successCallback,final Failcallback failcallback){
  4. new NetConnection(Config.SERVER_HTTP, HttpMethod.GET, new NetConnection.SuccessCallback() {
  5. @Override
  6. public void onSuccess(String result) {
  7. // TODO Auto-generated method stub
  8. try {
  9. JSONObject jsonObj = new JSONObject(result);
  10. System.out.println(jsonObj.getInt(Config.KEY_STATUS)+"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
  11. switch (jsonObj.getInt(Config.KEY_STATUS)) {
  12. case Config.STATUS_SUCCESS:
  13. if (successCallback != null) {
  14. List<Message> data = new ArrayList<Message>();
  15. JSONArray msgArray = jsonObj.getJSONArray(Config.KEY_TIMELINE);
  16. JSONObject json = null;
  17. System.out.println(msgArray.length());
  18. for (int i = 0; i < msgArray.length(); i++) {
  19. json = msgArray.getJSONObject(i);
  20. data.add(new Message(json.getString(Config.KEY_MSGID),
  21. json.getString(Config.KEY_MSG),json.getString(Config.KEY_PHONE_MD5)));
  22. System.out.println(data.toString()+"555555555555555");
  23. }
  24. successCallback.onSuccess(jsonObj.getInt(Config.KEY_PAGE), jsonObj.getInt(Config.KEY_PAGE),
  25. data);
  26. }
  27. break;
  28. case Config.STATUS_INVALID_TOKEN:
  29. if (failcallback != null) {
  30. failcallback.onFail(Config.STATUS_INVALID_TOKEN);
  31. }
  32. default:
  33. if (failcallback != null) {
  34. failcallback.onFail(Config.STATUS_FAIL);
  35. }
  36. break;
  37. }
  38. } catch (JSONException e) {
  39. if (failcallback != null) {
  40. failcallback.onFail(Config.STATUS_FAIL);
  41. }
  42. }
  43. }
  44. }, new NetConnection.FailCallback() {
  45. @Override
  46. public void onFail() {
  47. // TODO Auto-generated method stub
  48. if (failcallback != null) {
  49. failcallback.onFail(Config.STATUS_FAIL);
  50. }
  51. }
  52. }, Config.KEY_ACTION,Config.ACTION_TIMELINE,Config.KEY_PHONE_MD5,phone_md5,
  53. Config.KEY_TOKEN,token,Config.KEY_PAGE,page+"",Config.KEY_PERPAGE,perpage+"");
  54. }
  55. public static interface SuccessCallback{
  56. void onSuccess(int page,int perpage,List<Message> timeline);
  57. }
  58. public static interface Failcallback{
  59. void onFail(int errorCode);
  60. }

}

`

这个类同样预留了两个接口,实现此类的时候需要实现。用来对取得数据进行操作和对失败情况进行操作,此类将获取的数据存进list中了。

3.需要对取得列表数据进行显示,本文用ListActivity来显示,同时需要实现BaseAdapter方法。实现的代码如下:

  1. public class TimelineAdapter extends BaseAdapter{
  2. private Context context;
  3. public Context getContext(){
  4. return this.context;
  5. }
  6. private List<Message> data = new ArrayList<Message>();
  7. public TimelineAdapter(Context context) {
  8. // TODO Auto-generated constructor stub
  9. this.context = context;
  10. }
  11. @Override
  12. public int getCount() {
  13. // TODO Auto-generated method stub
  14. return data.size();
  15. }
  16. @Override
  17. public Object getItem(int position) {
  18. // TODO Auto-generated method stub
  19. return data.get(position);
  20. }
  21. @Override
  22. public long getItemId(int position) {
  23. // TODO Auto-generated method stub
  24. return position;
  25. }
  26. public void addAll(List<Message> data){
  27. this.data.addAll(data);
  28. notifyDataSetChanged();
  29. }
  30. public void clear(){
  31. data.clear();
  32. notifyDataSetChanged();
  33. }
  34. @Override
  35. public View getView(int position, View convertView, ViewGroup parent) {
  36. if (convertView == null) {
  37. convertView = LayoutInflater.from(getContext()).inflate(R.layout.aty_timeline_list_cell, null);
  38. convertView.setTag(new ListCell((TextView)convertView.findViewById(R.id.tvCell)));
  39. }
  40. ListCell lc = (ListCell)convertView.getTag();
  41. Message msg = (Message) getItem(position);
  42. lc.getTvCellLable().setText(msg.getMsg());
  43. return convertView;
  44. }
  45. private static class ListCell{
  46. private TextView tvCellLable;
  47. public ListCell(TextView tvCellLable){
  48. this.tvCellLable = tvCellLable;
  49. }
  50. public TextView getTvCellLable(){
  51. return tvCellLable;
  52. }
  53. }
  54. }

该类的构造方法需啊哟传入Context。至于adapater的数据时通过自己实现的addaLL方法来实现。

4.实现Timeline 类,并将数据传入adapter来显示。

具体代码如下:

  1. private void loadMessage(){
  2. System.out.println("losdlllllllllllll");
  3. //final ProgressDialog pd = ProgressDialog.show(this, getResources().getString(R.string.connecting),
  4. //getResources().getString(R.string.connect));
  5. new Timeline(phone_md5, token, 1, 20, new Timeline.SuccessCallback() {
  6. @Override
  7. public void onSuccess(int page, int perpage, List<Message> timeline) {
  8. // TODO Auto-generated method stub
  9. //pd.dismiss();
  10. adapter.clear();
  11. adapter.addAll(timeline);
  12. Toast.makeText(AtyTimeLine.this, R.string.fail_to_load_timeline, Toast.LENGTH_LONG).show();
  13. }
  14. }, new Timeline.Failcallback() {
  15. @Override
  16. public void onFail(int errorCode) {
  17. // TODO Auto-generated method stub
  18. //pd.dismiss();
  19. if (errorCode == Config.STATUS_INVALID_TOKEN) {
  20. startActivity(new Intent(AtyTimeLine.this,AtyLogin.class));
  21. finish();
  22. }else {
  23. Toast.makeText(AtyTimeLine.this, R.string.fail_to_load_timeline, Toast.LENGTH_LONG).show();
  24. }
  25. }
  26. });
  27. }

android 网络获取json并且显示(2)的更多相关文章

  1. Android Volley 库通过网络获取 JSON 数据

    本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...

  2. Android从服务端获取json解析显示在客户端上面

    Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Jso ...

  3. Android Volley获取json格式的数据

    为了让Android能够快速地访问网络和解析通用的数据格式Google专门推出了Volley库,用于Android系统的网络传输.volley库可以方便地获取远程服务器的图片.字符串.json对象和j ...

  4. 从网络获取json数据,使用imageloader获取网络图片资源并显示在ListView上

    http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0 这是一个接口,通过这个接口来获取数据并解析 大体上就是把解析的数据还有图片u ...

  5. 网络获取json数据并解析

    1.升级流程分析

  6. Android 自定义 ListView 显示网络上 JSON 格式歌曲列表

    本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...

  7. Android ListView从网络获取图片及文字显示

    上一篇文章说的是ListView展示本地的图片以及文本,这一篇说一下如何从网络获取图片以及文本来显示.事实上,一般是先获取Josn或sml数据,然后解释显示.我们先从网上获取xml,然后对其进行解析, ...

  8. Android代码优化----PullToRefresh+universal-image-loader实现从网络获取数据并刷新

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下   首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...

随机推荐

  1. 推送本地项目至Github遇到的问题以及解决办法记录

    在把本地新项目推送至GitHub仓库时的大致流程和步骤,首先现在GitHub上面新建一个项目,复制该项目的 带.git 后缀的地址,比如 git@github.com:XXX/XXX.git 然后在本 ...

  2. [COGS 1799][国家集训队2012]tree(伍一鸣)

    Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2 ...

  3. [HNOI2015]菜肴制作

    题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...

  4. [bzoj5016][Snoi2017]一个简单的询问

    来自FallDream的博客,未经允许,请勿转载,谢谢. 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出   get(l,r,x)表示计算区间[l,r]中 ...

  5. python3 字符串str 教程

    字符串可以用单引号或双引号来创建. Python 不支持单字符类型,单字符也在Python也是作为一个字符串使用. 例: var1 = 'Hello World!' var2 = "Pyth ...

  6. widows下的进程与服务

    进程: 当程序卡死的时候,我们可以直接通过任务管理器来关闭进程. 服务: 在这个界面,我们可以选择启动或者关闭相关服务,还可以选择服务是否自动启动. 以关闭MySQL自启动服务为例:https://j ...

  7. win10下python环境变量设置

    我用的是python_2.7.3.msi,从官网下载之后,一路按照默认进行安装. 安装之后配置环境变量的步骤如下: 1,点“我的电脑”,右键选“属性” 2,选择“高级系统设置”--->选“环境变 ...

  8. fatal error LNK1104: 无法打开文件“lua51.lib”

    今天学习C++与Lua通信,遇到了问题:fatal error LNK1104: 无法打开文件"lua51.lib" 开发环境: VS2012 cocos版本:cocos2d-x- ...

  9. C语言第五次作业——循环结构

    C语言程序设计第五次作业--循环结构(1) (一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增 ...

  10. 关于Matchvs一些使用心得与建议

    我的项目是类似<贪吃蛇>玩法的一款IO游戏,就是几个玩家在游戏界面中可以吃食物,也可以相互吃,吃了食物或对方都会变大这样子.我是在用cocos creator做完前端开发的部分后,开始接入 ...