在前面两节中,我们了解了如何从服务器中加载JSON数据。

现在,我们将把服务器中的JSON数据加载更新到ListView。

并且,结合之前博文的  “动态追加分页ListView数据”的相关知识,实现将服务器中的分页JSON数据,填充到ListView中。

回顾

以BaseAdapter做适配器的ListView:http://blog.csdn.net/jueblog/article/details/12114513

ListView内数据的动态追加:http://blog.csdn.net/jueblog/article/details/12148259

Activity的实现

package com.app.myhandler;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; import com.app.adapter.MyWeixinJSON;
import com.app.util.MyApplication;
import com.app.util.MyThread; /**
* 点击 追加数据的ListView
* @author 402-9
*/
public class ListViewPage extends Activity {
private ListView lv;
private MyWeixinJSON mJson;
private JSONArray mData = new JSONArray();// JSON数据源
private View view_page_footer;// 底部视图
private int page = 1;// 加载页码
private int totalPage;// 总数据
private String url = new String("http://192.168.8.4/wt_guang.php?frm=3g&cid=100");
private TextView text_page; private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
try {
String result = msg.obj.toString();
JSONObject object = new JSONObject(result);
totalPage = (Integer) object.get("totalPage");
if(mJson==null) {
mData = (JSONArray) object.get("items");
mJson = new MyWeixinJSON(mData, ListViewPage.this);
lv.setAdapter(mJson);//为ListView绑定适配器
} else {
mData = MyApplication.joinJSONArray(mData, (JSONArray) object.get("items"));
mJson.setList(mData);
mJson.notifyDataSetChanged();
}
text_page.setText("下一页");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.weixin);
lv = (ListView) findViewById(R.id.lv); new MyThread(handler, url.toString(), 1).start(); view_page_footer = LayoutInflater.from(this).inflate(R.layout.view_page_footer, null);
lv.addFooterView(view_page_footer);// 添加底部视图
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
try {
JSONObject jsonObject = (JSONObject) mData.get(position);
Toast.makeText(ListViewPage.this,
jsonObject.getString("title"), Toast.LENGTH_SHORT)
.show();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}); text_page = (TextView) view_page_footer.findViewById(R.id.text_page);
text_page.setOnClickListener(new View.OnClickListener() {
// 点击按钮 追加数据 并通知适配器
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
page++;
if(page<=totalPage) {
text_page.setText("正在加载中...");
new MyThread(handler, url+"&p="+page, 1).start();
} else {
text_page.setText("已是最末页...");
text_page.setEnabled(false);
}
}
});
}
}
mData = MyApplication.joinJSONArray(mData, (JSONArray) object.get("items"));

所调用的方法为 http://blog.csdn.net/jueblog/article/details/12622423中提供的方法。

适配器的修改

package com.app.adapter;

import org.json.JSONArray;
import org.json.JSONObject; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView; import com.app.myhandler.R; public class MyWeixinJSON extends BaseAdapter {
private LayoutInflater mInflater;// 动态布局映射
private JSONArray list;
private Context context;
// private int i = 0; public void setList(JSONArray list) {
this.list = list;
} public MyWeixinJSON(JSONArray list, Context context) {
this.list = list;
this.context = context;
this.mInflater = LayoutInflater.from(context);
} @Override
public int getCount() {
// TODO Auto-generated method stub
return list.length();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
// System.out.println("正在渲染第"+position+"行 +++ "+ i++);
OneView oneView;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_weixin, null);// 根据布局文件实例化view
oneView = new OneView();
oneView.title = (TextView) convertView.findViewById(R.id.title);// 找某个控件
oneView.time = (TextView) convertView.findViewById(R.id.time);
oneView.info = (TextView) convertView.findViewById(R.id.info);
oneView.img = (ImageView) convertView.findViewById(R.id.img);
convertView.setTag(oneView);// 把View和某个对象关联起来
} else {
oneView = (OneView) convertView.getTag();
}
JSONObject jObject = null;
try {
jObject = list.getJSONObject(position);// 根据position获取集合类中某行数据
oneView.title.setText(jObject.get("itemID").toString());// 给该控件设置数据(数据从集合类中来)
oneView.time.setText(jObject.get("price").toString());
oneView.info.setText(jObject.get("title").toString());
oneView.img.setBackgroundResource(R.drawable.special_spring_head2);
// oneView.img.setImageDrawable(Drawable.createFromStream(new
// URI(jObject.getString("pic_url"))., "src"));
} catch (Exception e) {
// TODO: handle exception
}
return convertView;
} /** 把每行布局文件的各个控件包装成一个对象 */
private class OneView {
TextView title;
TextView time;
TextView info;
ImageView img;
}
}

JSON数据

最后 瞄一眼服务器上的JSON数据:
{
"totalCount": 9,
"totalPage": 2,
"items": [
{
"itemID": "13889239752",
"title": "PEACE DOVE 正品* 真兔毛 范儿厚毛衣开衫 清库价",
"pic_url": "http://img01.taobaocdn.com/bao/uploaded/i5/T1ELuGXj0yXXbAjkA._083138.jpg",
"click_url": "http://item.taobao.com/item.htm?id=13889239752",
"price": "98.00",
"promotion_price": "0.00",
"liked": "0"
},
{
"itemID": "13357878044",
"title": "现货 呛口小辣椒11月29日香港行snidel 翻领双排扣毛呢大衣外套",
"pic_url": "http://img03.taobaocdn.com/bao/uploaded/i3/T1KTWDXipfXXXmSFDX_113804.jpg",
"click_url": "http://item.taobao.com/item.htm?id=13357878044",
"price": "278.00",
"promotion_price": "0.00",
"liked": "0"
},
{
"itemID": "12740033159",
"title": "2011新款呛口小辣椒子萱王翔貉子毛毛领军绿色工装棉服棉衣大衣",
"pic_url": "http://img01.taobaocdn.com/bao/uploaded/i1/T1WiCoXi4BXXad.Qs9_073952.jpg",
"click_url": "http://item.taobao.com/item.htm?id=12740033159",
"price": "628.00",
"promotion_price": "0.00",
"liked": "0"
},
{
"itemID": "8603809978",
"title": "圣诞款大衣 三色入",
"pic_url": "http://img01.taobaocdn.com/bao/uploaded/i1/T1GWXTXhhxXXaMGqo3_045745.jpg",
"click_url": "http://s.click.taobao.com/t_8?e=7HZ6jHSTZTlU5Xur%2B%2F50d2poSR5Ba0A%2Fi8tpiW6m04z%2BWKzb6yELcZsJq6zxF7EMTqmpst%2FNOGepsZQvjjXKR0huW7F8S1whVzYKzICAu1lT&p=mm_10009952_0_0",
"price": "165.00",
"promotion_price": "0.00",
"liked": "0"
},
{
"itemID": "10629952619",
"title": "裁诺 春装新款2012女装 韩版带帽中长款加厚卫衣 女 秋冬外套大码",
"pic_url": "http://img01.taobaocdn.com/bao/uploaded/i1/T1PASfXfpoXXc.O0vb_093452.jpg",
"click_url": "http://item.taobao.com/item.htm?id=10629952619",
"price": "158.00",
"promotion_price": "0.00",
"liked": "0"
},
{
"itemID": "9158721999",
"title": "清仓包邮 出口欧美大码超酷水洗打磨斜开襟修身加厚抓绒卫衣外套",
"pic_url": "http://img03.taobaocdn.com/bao/uploaded/i3/T12t5KXXJqXXbjSw.8_100610.jpg",
"click_url": "http://s.click.taobao.com/t_8?e=7HZ6jHSTZPhaK%2FmBeumaH2YuQWkORNRTfXSCf08v9iowvo%2F0Akhswsb9gfNlScFQL%2Bc%2Bp%2BFUQiV5QW7qQyiq%2BJQ4CS399exvrZIKVVH3ZZNULw%3D%3D&p=mm_10009952_0_0",
"price": "398.00",
"promotion_price": "0.00",
"liked": "0"
}
]
}

效果图

由于服务器JSON数据是比较随意找的,所以内容不是很适合“微信”屏幕。
不要在意这些细节、、、

程序执行的第一页:



点击下一页,将会动态追加第二页的数据



由于服务器中只有两页数据,所以当再次点击“下一页”时,会显示“已是最末页”

【Android】Handler的应用(三):从服务器端分页加载更新ListView的更多相关文章

  1. ListView实现分页加载(三)实现分页加载

    在上一篇中,我们实现了底部布局(即带上了进度条).没有读过的朋友可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4866966.html 但是进度条 ...

  2. Android中获取网络数据时的分页加载

    //此实在Fragment中实现的,黄色部分为自动加载,红色部分是需要注意的和手动加载,    蓝色部分是睡眠时间,自我感觉不用写  ,还有就是手动加载时,不知道为什么进去后显示的就是最后一行,求大神 ...

  3. Android为TV端助力 转载:RecyclerView分页加载

    package com.android.ryane.pulltoloaddata_recyclerview; import android.os.Handler;import android.os.L ...

  4. Android 图片从网页中获取并动态加载到listview中

    实现功能: 效果图: 代码:这里

  5. Android基本控件之listView(三)<用ListView实现分页加载>

    我们之前讨论了ListView的基本使用方法和ListView的优化 今天我们再来讨论一个关于ListView的一个新的东西~就是分页加载.那么什么是分页加载呢?简单点说,就是"下拉刷新&q ...

  6. java攻城狮之路(Android篇)--widget_webview_metadata_popupwindow_tabhost_分页加载数据_菜单

    一.widget:桌面小控件1 写一个类extends AppWidgetProvider 2 在清单文件件中注册: <receiver android:name=".ExampleA ...

  7. Android三种基本的加载网络图片方式(转)

    Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 ...

  8. Android中ListView分页加载数据

    public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...

  9. 【Android进阶】Listview分页加载数据的实现

    Listview分页加载数据的实现 public class MainActivity extends Activity { protected static final int SUCCESS_GE ...

随机推荐

  1. HDU 3492 (直线与所有线段相交) Segment

    题意: 给出n个线段,判断是否存在一条直线使得所有线段在直线上的射影的交非空. 分析: 如果我们找到一条与所有线段相交的直线,然后做一条与该直线垂直的直线,这些线段在直线上的射影就一定包含这个垂足. ...

  2. Java [Leetcode 229]Bulls and Cows

    题目描述: You are playing the following Bulls and Cows game with your friend: You write down a number an ...

  3. <九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性

    设计类

  4. 一天一个Java基础——反射

    1.概念 反射主要是指程序可以访问,检测和修改它本身的状态或行为的一种能力 Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以运行时装配,无须在组件之间进行链接 反射允许在编写与执行 ...

  5. 【转】Windows环境下Android Studio v1.0安装教程

    原文网址:http://ask.android-studio.org/?/article/9 http://android-studio.org/index.php/docs/experience/1 ...

  6. Zend Framework 入门(2)—多国语言支持

    如果你的项目想要支持多语言版本,那么就需要用到 Zend_Translate.Zend_Translate 的详细文档在这里,不过如果想偷懒的话,也很简单,在View Helpers 文档中介绍了如何 ...

  7. 自己动手写路由器之ioctl获取网络接口信息

    最近打算写一个简单路由器,里面有用到ioctl获取网络接口信息,那就先把这部分单独拿出来说一说吧! ioctl这个函数,可以用来对特殊文件的基础设备参数进行操作,它们可以完成与打开文件描述符相关联的控 ...

  8. mysql-5.6.15_winX64在win764位系统下的安装操作步骤总结

      mysql 版权声明:本文为博主原创文章,未经博主允许不得转载. 自从换了新电脑win764位,支持的内存从原来的3G(2G机身+1G内存条)变到了现在的8G(机身4G+4G内存条),机子的速度是 ...

  9. 【LeetCode 215】Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  10. 提取数字、英文、中文、过滤重复字符等SQL函数(含判断字段是否有中文)

    --SQL 判断字段值是否有中文 create  function  fun_getCN(@str  nvarchar(4000))    returns  nvarchar(4000)      a ...