在服务器与客户端之间通信,json数据是一种常用格式,本文主要在服务器端构建数据,在客户端接收显示,并且在listview上显示出来

服务器端的构建

简单的javabean与返回结果函数与插入函数略过

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); List<MyShop> shops = JsonService.getListShop(); StringBuffer sb = new StringBuffer(); sb.append('['); for (MyShop shop : shops) { sb.append('{').append("\"name\":").append("\""+shop.getName()+"\"").append(",");
sb.append("\"detail\":").append("\""+shop.getDetail()+"\"").append(",");
sb.append("\"distance\":").append("\""+shop.getDistance()+"\"").append(",");
sb.append("\"address\":").append("\""+shop.getAddress()+"\"").append(",");
sb.append("\"popularity\":").append(shop.getPopularity());
sb.append('}').append(",");
} sb.deleteCharAt(sb.length() - 1); sb.append(']'); out.write(new String(sb)); out.flush(); out.close(); }

在浏览器中直接输入访问http://localhost:8080/AppServer/JsonServlet

可得

可以在服务器端直接查看json数据

客户端接收与解析json数据

public class JsonParse {

    /**

     * 解析Json数据

     *

     * @param urlPath

     * @return mlists

     * @throws Exception

     */

    public static List<MyShop> getListShop(String urlPath) throws Exception {

            List<MyShop> mlists = new ArrayList<MyShop>();

            byte[] data = readParse(urlPath);

            JSONArray array = new JSONArray(new String(data));

            for (int i = 0; i < array.length(); i++) {

                    JSONObject item = array.getJSONObject(i);

                    String name = item.getString("name");
String detail = item.getString("detail");
String distance = item.getString("distance"); String popularity = item.getString("popularity"); String address = item.getString("address"); mlists.add(new MyShop(name, detail, distance,address,popularity)); } return mlists; } /** * 从指定的url中获取字节数组 * * @param urlPath * @return 字节数组 * @throws Exception */ public static byte[] readParse(String urlPath) throws Exception { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] data = new byte[1024]; int len = 0; URL url = new URL(urlPath); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); InputStream inStream = conn.getInputStream(); while ((len = inStream.read(data)) != -1) { outStream.write(data, 0, len); } inStream.close(); return outStream.toByteArray(); } }

在activity中开启子线程来接收服务器数据

new Thread(new Runnable() {

            private String tag;

            @Override
public void run() {
// TODO Auto-generated method stub
//获得新闻集合 List<MyShop> shopList = null;
try {
shopList = JsonParse.getListShop("http://192.168.247.1:8080/AppServer/JsonServlet");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i(tag, "在RUN中LIST长度为"+shopList.size());
Message msg=new Message();
if(shopList!=null)
{
msg.what=SUCCESS;
msg.obj=shopList; }else
{
msg.what=FAILED;
}
handler.sendMessage(msg);
Log.i(tag, "***********T长度为"+shopList.size()); }
}).start();

消息处理器

 //消息处理器
private Handler handler=new Handler(){ /**
* 接收消息
*/
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub String tag = null;
switch (msg.what) {
case SUCCESS: //访问成功,有数据 //绑定数据
Log.i(tag,"%%%%%%%%%%到达了消息处理器");
myshoplist=(List<MyShop>) msg.obj;
Log.i(tag, "handleMessage中数据newInfoList长度为"+myshoplist.size());
NearAdapter adapter=new NearAdapter();
Log.i(tag, "有没有到达ADAPTER"+adapter.getCount());
showList.setAdapter(adapter); break; case FAILED: //访问失败
Toast.makeText(ChooseMer.this, "当前网络崩溃了", 0).show();
break; default:
break;
} } };

配置适配器

public class NearAdapter extends BaseAdapter {

        @Override
public int getCount() {
// TODO Auto-generated method stub
return myshoplist.size();
} @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) { if (convertView == null) {
LayoutInflater inflater = LayoutInflater
.from(ChooseMer.this);
convertView = inflater.inflate(R.layout.nearby_list_item, null);
init(convertView,position);
} return convertView;
} public void init(View convertView,int position) {
hold.name = (TextView) convertView
.findViewById(R.id.nearby_item_name);
MyShop shop=myshoplist.get(position);
hold.name.setText(shop.getName());
hold.local = (TextView) convertView
.findViewById(R.id.nearby_item_local);
hold.local.setText(shop.getDetail());
hold.dis1 = (TextView) convertView
.findViewById(R.id.nearby_item_dis1);
hold.dis1.setText(shop.getDistance());
hold.dis2 = (TextView) convertView
.findViewById(R.id.nearby_item_dis2);
hold.dis2.setText(shop.getAddress());
hold.dis3 = (TextView) convertView
.findViewById(R.id.nearby_item_dis3);
hold.dis3.setText(shop.getPopularity());
}
}

配置完成,效果如下

Android客户端与服务器之间传递json数据的更多相关文章

  1. 使用HttpURLConnection实现在android客户端和服务器之间传递对象

    一般情况下,客户端和服务端的数据交互都是使用json和XML,相比于XML,json更加轻量级,并且省流量,但是,无论我们用json还是用xml,都需要我们先将数据封装成json字符串或者是一个xml ...

  2. 序列化和反序列化在浏览器和 Web 服务器之间传递的数据、加密解密

    js中数组不能传递到后台,需进行json序列化: var data = new Array(); data.push({para1:name,para2:answer}); string data = ...

  3. Android:客户端和服务器之间传输数据加密

    Android客户端与服务器进行数据传输时,一般会涉及到两类数据的加密情况,一类是只有创建者才能知道的数据,比如密码:另一类是其他比较重要的,但是可以逆向解密的数据. 第一类:密码类的数据,为了让用户 ...

  4. Android Fragment之间传递List数据

    要说的是在两个Fragment之间传递List数据,比如有个List<User>,以及传递字符串数据,比如testId,该如何从FragmentA传递到FragmentB呢? 下面这个例子 ...

  5. 利用AXIS2传递JSON数据

    Axis2是目前比较流行的WebService引擎.WebService被应用在很多不同的场景.例如,可以使用WebService来发布服务端 Java类的方法,以便使用不同的客户端进行调用.这样可以 ...

  6. Android客户端与服务器

    就是普通的服务器端编程,还不用写界面,其实还比服务器编程简单一些.跟J2EE一样的服务器,你android这一方面只要用json或者gson直接拿数据,后台的话用tomcat接受请求操作数据,功能不复 ...

  7. Android客户端与服务器交互方式-小结

    最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json.要在Android手机客户端与pc服务器交互,需要 ...

  8. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)

    form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...

  9. Android学习总结——Activity之间传递参数

    核心内容:一.在 Activity 之间传递简单数据二.在 Activity 之间传递复杂数据 三.在 Activity 之间传递自定义值对象   软件环境:Android Studio   一.在 ...

随机推荐

  1. HD1847 Good Luck in CET-4 Everybody!(巴什博弈)

    巴什博弈: 一堆物品n个,最多取m个,最少取1个,最后取走的人获胜 分析:只要保证取玩最后剩m+1个,则必定胜利,所以构造m+1,只要n是 m+1的倍数,则先手必败,每次先手取玩,后手可取使得剩下的仍 ...

  2. 使用Tengine替代Nginx作为负载均衡服务器

    Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检 ...

  3. MySQL的left join中on与where的区别

    关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行,即使on中包含有A表中的列 ...

  4. java连接各种数据库代码大全

    1.Oracle8/8i/9i数据库(thin模式)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();S ...

  5. 《C++代码设计与重用》 书评

    作者:唐风 主页:www.cnblogs.com/liyiwen   前几个星期买了,一直没有直接细翻,买的时候看了背面的两个推荐,一个是孟岩,一个是Scott Meyers(Effective C+ ...

  6. 移动web调式利器---Rosin研究

    移动web调式利器---Rosin研究 阅读目录 关于Rosin Rosin在Fiddler中如何使用 回到顶部 一:关于Rosin Rosin是Fiddler的一个插件,它能接受页面中的JS的con ...

  7. ExtJS学习之路第二步:Ext.Component 和 Ext.dom.Element 的区别

    让我们来初步的探讨下Ext.Component和Ext.Element的区别. jQuery偏重于DOM元素的操作 1.每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的D ...

  8. Fortran向C传递NULL值

    在很多C或C++的头文件定义中,NULL被指定定义为0,这里不再具体展开 gfortran的手册关于iso c binding的章节,定义NULL如下 Moreover, the following ...

  9. Window 常用命令

    Window 常用命令   Ctrl +alt +delete 切换用户 Ctrl +shift+esc 启动任务管理

  10. DLL注入之注册表

    0x00 唠叨 编写本系列文章纯属为了系统学习DLL注入的方法,所以很多方法可能已经过时,希望各位看官勿喷.当然若有更好的方法,希望不腻赐教.若本文有任何错的地方,也希望各位指正.谢谢! 0x01 适 ...