zoukankan      html  css  js  c++  java
  • Android客户端与服务器之间传递json数据

    在服务器与客户端之间通信,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数据

    客户端接收与解析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());
            }
        }

    配置完成,效果如下

    安卓显示

  • 相关阅读:
    华为 简单OSPF实验
    华为 基于MAC地址的VLAN划分
    完全背包
    01背包问题
    90. 子集 II
    Java去除字符串中的特殊符号或者指定的字符
    Java查找指定文件夹下的所有文件
    Java面试基础
    Spring获取ApplicationContext
    JSP & EL & JSTL
  • 原文地址:https://www.cnblogs.com/jjx2013/p/6223757.html
Copyright © 2011-2022 走看看