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();
  • 相关阅读:
    关于web开发的一点理解
    如何通过Request.ServerVariables["HTTP_USER_AGENT"]获取客户端操作系统信息
    将图片转换为Base64
    asp.net 图片质量压缩(不改变尺寸)
    下载网路图片并保存在硬盘
    HTTP Content-type 对照表
    mssql 查询全部用户创建表 条数及占用空间大小(KB)
    幸运抽奖数据结构
    非UI线程和UI线程通信
    爬取淘宝“手机信息”
  • 原文地址:https://www.cnblogs.com/837634902why/p/12305627.html
Copyright © 2011-2022 走看看