android 网络获取json并且显示(2)
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)的更多相关文章
- Android Volley 库通过网络获取 JSON 数据
本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...
- Android从服务端获取json解析显示在客户端上面
Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Jso ...
- Android Volley获取json格式的数据
为了让Android能够快速地访问网络和解析通用的数据格式Google专门推出了Volley库,用于Android系统的网络传输.volley库可以方便地获取远程服务器的图片.字符串.json对象和j ...
- 从网络获取json数据,使用imageloader获取网络图片资源并显示在ListView上
http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0 这是一个接口,通过这个接口来获取数据并解析 大体上就是把解析的数据还有图片u ...
- 网络获取json数据并解析
1.升级流程分析
- Android 自定义 ListView 显示网络上 JSON 格式歌曲列表
本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...
- Android ListView从网络获取图片及文字显示
上一篇文章说的是ListView展示本地的图片以及文本,这一篇说一下如何从网络获取图片以及文本来显示.事实上,一般是先获取Josn或sml数据,然后解释显示.我们先从网上获取xml,然后对其进行解析, ...
- Android代码优化----PullToRefresh+universal-image-loader实现从网络获取数据并刷新
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- android客户端从服务器端获取json数据并解析的实现代码
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...
随机推荐
- [BJOI 2010]次小生成树Tree
Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了.小 P 说,让小 C 求出一 ...
- [ZJOI 2015]幻想乡战略游戏
Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来, ...
- UpdateAfterEvent
10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生.玉米.饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者...Description 小松鼠打了10个小时的游戏,一脸满足.却发 ...
- 因数(factor)
一个最基本的算数法则就是大于1的整数都能用1个或多个素数相乘的形式表示出来.当然,有多种质因子排列方案 如: 10=2×5=5×2 20=5×2×2=2×5×2=2×2×5 用f(k)表示k的质 ...
- 计蒜客NOIP2017提高组模拟赛(五)day1-机智的 AmyZhi
传送门 很水的题目啦QAQ #include<cstdio> #include<cstdlib> #include<algorithm> #include<c ...
- linux x86内核中的分页机制
Linux采用了通用的四级分页机制,所谓通用就是指Linux使用这种分页机制管理所有架构的分页模型,即便某些架构并不支持四级分页.对于常见的x86架构,如果系统是32位,二级分页模型就可满足系统需求: ...
- python 中range numpy.arange 和 numpy.linspace 的区别
1.返回值不同 range返回一个range对象,numpy.arange和numpy.linspace返回一个数组. 2.np.arange的步长可以为小数,但range的步长只能是整数. 与Pyt ...
- 笔记7 AOP练习<有疑问>
场景描述: 核心业务:举行一场古典音乐会. 周边功能:观众入场,关闭手机.落座,觉得音乐好听时鼓掌,觉都不好听则退票.(切面) 1.编写切点(切点用于准确定位应该在什么地方应用切面的通 知)----即 ...
- Linux学习之CentOS(十五)----磁盘管理之 启动挂载(转)
启动挂载 /etc/fstab 及 /etc/mtab 刚刚上面说了许多,那么可不可以在启动的时候就将我要的文件系统都挂好呢?这样我就不需要每次进入 Linux 系统都还要在挂载一次呀!当然可以啰!那 ...
- JS 判断是否为IP格式
<html> <head> <title><a href='http://js.zz5u.net'><u>JavaScript</u& ...