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



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

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

public class Message {
    private String msg = null,msgId = null,phone_md5 = null;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getMsgId() {
        return msgId;
    }

    public void setMsgId(String msgId) {
        this.msgId = msgId;
    }

    public String getPhone_md5() {
        return phone_md5;
    }

    public void setPhone_md5(String phone_md5) {
        this.phone_md5 = phone_md5;
    }

    public Message(String msgId, String msg, String phone_md5) {
        this.msg = msg;
        this.msgId = msgId;
        this.phone_md5 = phone_md5;
    }

}

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

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

public class Timeline {
public Timeline(String phone_md5,String token,int page,int perpage,
        final SuccessCallback successCallback,final Failcallback failcallback){
    new NetConnection(Config.SERVER_HTTP, HttpMethod.GET, new NetConnection.SuccessCallback() {
    @Override
        public void onSuccess(String result) {
            // TODO Auto-generated method stub
            try {
                JSONObject jsonObj = new JSONObject(result);
                System.out.println(jsonObj.getInt(Config.KEY_STATUS)+"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
                switch (jsonObj.getInt(Config.KEY_STATUS)) {
                case Config.STATUS_SUCCESS:
                    if (successCallback != null) {
                        List<Message> data  = new ArrayList<Message>();
                        JSONArray msgArray = jsonObj.getJSONArray(Config.KEY_TIMELINE);
                        JSONObject json = null;
                        System.out.println(msgArray.length());
                        for (int i = 0; i < msgArray.length(); i++) {
                            json = msgArray.getJSONObject(i);
                            data.add(new Message(json.getString(Config.KEY_MSGID),
                                    json.getString(Config.KEY_MSG),json.getString(Config.KEY_PHONE_MD5)));
                            System.out.println(data.toString()+"555555555555555");
                        }
                        successCallback.onSuccess(jsonObj.getInt(Config.KEY_PAGE), jsonObj.getInt(Config.KEY_PAGE),
                                data);
                    }
                    break;
                case Config.STATUS_INVALID_TOKEN:
                    if (failcallback != null) {
                        failcallback.onFail(Config.STATUS_INVALID_TOKEN);
                    }
                default:
                    if (failcallback != null) {
                        failcallback.onFail(Config.STATUS_FAIL);
                    }
                    break;
                }
            } catch (JSONException e) {
                if (failcallback != null) {
                    failcallback.onFail(Config.STATUS_FAIL);
                }
            }
        }
    }, new NetConnection.FailCallback() {

        @Override
        public void onFail() {
            // TODO Auto-generated method stub
            if (failcallback != null) {
                failcallback.onFail(Config.STATUS_FAIL);
            }
        }
    }, Config.KEY_ACTION,Config.ACTION_TIMELINE,Config.KEY_PHONE_MD5,phone_md5,
    Config.KEY_TOKEN,token,Config.KEY_PAGE,page+"",Config.KEY_PERPAGE,perpage+"");
}
public static interface SuccessCallback{
    void onSuccess(int page,int perpage,List<Message> timeline);
}
public static interface Failcallback{
    void onFail(int errorCode);
}

}

`

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

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

public class TimelineAdapter extends BaseAdapter{
    private Context context;
    public Context getContext(){
        return this.context;
    }
    private List<Message> data = new ArrayList<Message>();
    public TimelineAdapter(Context context) {
        // TODO Auto-generated constructor stub
        this.context = context;
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    public void addAll(List<Message> data){
        this.data.addAll(data);
        notifyDataSetChanged();
    }
    public void clear(){
        data.clear();
        notifyDataSetChanged();
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.aty_timeline_list_cell, null);
            convertView.setTag(new ListCell((TextView)convertView.findViewById(R.id.tvCell)));
        }
        ListCell lc = (ListCell)convertView.getTag();
        Message msg = (Message) getItem(position);
        lc.getTvCellLable().setText(msg.getMsg());
        return convertView;
    }
    private static class ListCell{
        private TextView tvCellLable;
        public ListCell(TextView tvCellLable){
            this.tvCellLable = tvCellLable;
        }
        public TextView getTvCellLable(){
            return tvCellLable;
        }
    }

}

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

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

具体代码如下:

private void loadMessage(){
        System.out.println("losdlllllllllllll");
        //final ProgressDialog pd = ProgressDialog.show(this, getResources().getString(R.string.connecting),
                //getResources().getString(R.string.connect));
        new Timeline(phone_md5, token, 1, 20, new Timeline.SuccessCallback() {
            @Override
            public void onSuccess(int page, int perpage, List<Message> timeline) {
                // TODO Auto-generated method stub
                //pd.dismiss();
                adapter.clear();
                adapter.addAll(timeline);
                Toast.makeText(AtyTimeLine.this, R.string.fail_to_load_timeline, Toast.LENGTH_LONG).show();
            }
        }, new Timeline.Failcallback() {

            @Override
            public void onFail(int errorCode) {
                // TODO Auto-generated method stub
                //pd.dismiss();
                if (errorCode == Config.STATUS_INVALID_TOKEN) {
                    startActivity(new Intent(AtyTimeLine.this,AtyLogin.class));
                    finish();
                }else {
                    Toast.makeText(AtyTimeLine.this, R.string.fail_to_load_timeline, Toast.LENGTH_LONG).show();
                }
            }
        });
    }

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. shell实现脚本监控服务器及web应用

    实际工作中我们需要知道部署在服务器上的应用有没有问题,但是人为的操作太麻烦有咩有简单的方式呢shell来监控我们服务器运行状态以及服务器上部署的应用,如果出现异常就会自动发送一个邮件给我们,开始搞起. ...

  2. [SCOI2009]围豆豆

    Description Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别为每颗豆子的分值. 接着N行有一个N×M的字符矩阵来描述 ...

  3. BZOJ 1510: Kra-The Disks

    Johnny 在生日时收到了一件特殊的礼物,这件礼物由一个奇形怪状的管子和一些盘子组成. 这个管子是由许多不同直径的圆筒(直径也可以相同) 同轴连接而成. 这个管子的底部是封闭的,顶部是打开的. 下图 ...

  4. Elasticsearch 创建、更新、删除文档、处理冲突

    ----创建新文档---- 1._index,_type和_id的组合可以唯一标识一个文档,所以确保一个新文档的最简单的办法就是,使用索引请求的POST形式让elsticsearch自动生成唯一_id ...

  5. python中读取文件数据时要注意文件路径

    我们在用python进行数据处理时往往需要将文件中的数据取出来做一些处理,这时我们应该注意数据文件的路径.文件路径不对,回报如下错误: FileNotFoundError: File b'..Adve ...

  6. Java实现word文档在线预览,读取office文件

    想要实现word或者其他office文件的在线预览,大部分都是用的两种方式,一种是使用openoffice转换之后再通过其他插件预览,还有一种方式就是通过POI读取内容然后预览. 一.使用openof ...

  7. 前端工程师:电信专业转前端是如何拿到阿里、腾讯offer的?

    1.个人情况 ● 211本科 985硕士 电信专业 女生 ● 16年3月开始学习前端 ● 16年7月开始实习,共五家实习经历(不是特别厉害的厂) ● 秋招拿到两个offer(阿里.腾讯).没错只有这两 ...

  8. hibernate4整合spring3出现java.lang.NoClassDefFoundError: [Lorg/hibernate/engine/FilterDefinition;

    解决办法 原先:<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annota ...

  9. 吴恩达深度学习第2课第2周编程作业 的坑(Optimization Methods)

    我python2.7, 做吴恩达深度学习第2课第2周编程作业 Optimization Methods 时有2个坑: 第一坑 需将辅助文件 opt_utils.py 的 nitialize_param ...

  10. The specified JRE installation does not exist异常的原因和解决办法

    今天,回首为了学习新框架,于是将JDK的版本从1.7开发标配版换成了1.8,一切前期很顺利,完成了新框架的测试和体验,但在运行原有项目的时候问题出现了,爆出了The specified JRE ins ...