zoukankan      html  css  js  c++  java
  • 假期学习记录12(android与web服务器之间的list/json数组的消息传递)

    今天开发遇到了android从服务器上要获取一个列表的信息,记不大清了还得去看以前的项目,现在将代码发博客记录一下

    下面是服务器中的servlet中的代码,主要看doget就可以了,安卓将向这个servlet发送请求,然后这个servlet会返回给android一个信息,然后进行解析

    SportNew其实就是一个类,WriteSportNew.loadSportNew(demand);是一个select的查询列表的函数就不多说了,应该会一点数据库都没问题。

    package org.java.servlet;
    
    import java.io.IOException;
    import java.util.ArrayList;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.java.myclass.SportNew;
    import org.java.write.WriteSportNew;
    import org.json.JSONArray;
    import org.json.JSONObject;
    
    
    
    /**
     * Servlet implementation class getSportNewMess
     */
    @WebServlet("/getSportNewMess")
    public class getSportNewMess extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public getSportNewMess() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            String demand=request.getParameter("demand");
            ArrayList<SportNew> sportNews=WriteSportNew.loadSportNew(demand);
            JSONArray jsonarray = new JSONArray();
            for(SportNew sportNew:sportNews) {
                JSONObject jo = new JSONObject();
                jo.put("newName",sportNew.getNewName());
                jo.put("imageName",sportNew.getImageName());
                jo.put("weblink", sportNew.getWeblink());
                jsonarray.put(jo);
            }
            System.out.print("jsonArray="+jsonarray);
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().print(jsonarray);
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }



    然后我们在android项目中新建NetUtil类代码如下,一共两个函数第一个函数是访问servlet的,给servlet传了一个demand的值,第二个函数是必须要有的解析函数,一个文件中第一个类型的函数可以写很多,但是第二个函数写一个就可以了。一会儿我们将会在Activity的java中调用第一个函数

    public class NetUtil {
        public static String getSportNewMes(String demand){
            HttpURLConnection conn=null;
            //一下为自己的服务器ip,10.0.2.2:8081是本机的ip,android中本机ip不是localhost
            String myurl = "http://10.0.2.2:8081/SportRecord/getSportNewMess?";
            try {
                //拼接字符串向服务器传值
                String data="demand="+demand;
    
                URL url=new URL(myurl+data);
                conn=(HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(10000);
                conn.setReadTimeout(5000);
                conn.connect();
                int code=conn.getResponseCode();
    
    
                if(code==200){
                    //接受数据
                    InputStream is=conn.getInputStream();
                    String state=getStringFromInputStream(is);
                    return state;
                }
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                if(conn!=null){
                    conn.disconnect();
                }
            }
    
    
            return null;
        }
    private static String getStringFromInputStream(InputStream is) throws Exception{
    
            ByteArrayOutputStream baos=new ByteArrayOutputStream();
            byte[] buff=new byte[1024];
            int len=-1;
            while((len=is.read(buff))!=-1){
                baos.write(buff, 0, len);
            }
            is.close();
            String mes=baos.toString();
            baos.close();
    
    
            return mes;
        }
    }

    在android的Activity.java中调用如上函数的代码如下,其中new Thread是开启一个线程,android不允许在主线程中访问网络

    new Thread(new Runnable() {
                @Override
                public void run() {
                    final String state = NetUtil.getSportNewMes("limit");
                    System.out.println("=======================================================");
                    System.out.println(state);
                    System.out.println("=======================================================");
                    try {
    //将字符串转换为JSONArray
                        net.sf.json.JSONArray array= net.sf.json.JSONArray.fromObject(state);
                        for(int i=0;i<array.size();i++){
    //获得第一个array结果
                            net.sf.json.JSONObject o = (net.sf.json.JSONObject) array.get(i);
                            sportNews.add(new SportNew(o.get("newName").toString(),o.get("imageName").toString(),o.get("weblink").toString()));
                          
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
  • 相关阅读:
    python json 和 pickle的补充 hashlib configparser logging
    go 流程语句 if goto for swich
    go array slice map make new操作
    go 基础
    块级元素 行内元素 空元素
    咽炎就医用药(慢性肥厚性咽炎)
    春季感冒是风寒还是风热(转的文章)
    秋季感冒 咳嗽 怎么选药
    解决IE浏览器“无法显示此网页”的问题
    常用的 css 样式 记录
  • 原文地址:https://www.cnblogs.com/837634902why/p/12305627.html
Copyright © 2011-2022 走看看