android 网络获取json并且显示(2)

来源:互联网 发布:大数据 关联分析算法 编辑:程序博客网 时间:2024/06/04 08:42

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();                }            }        });    }
1 0
原创粉丝点击