旧城不覆 2018-08-16 08:49 采纳率: 60%
浏览 4065
已结题

求Android通过http请求获取json数据的demo

  • 写回答

10条回答 默认 最新

  • niaonao 2018-08-21 02:42
    关注

    HTTP请求发送JSON数据:

     public class TransObjectToWeb {
        /**
         * 创建方法:将对象传输到 web 端
         * @param user
         */
        private Boolean flag = false;
        public boolean sendToWeb(User user){
    
            try {
                // (1)服务器的访问路径
                Log.i("TAG","创建连接");
                URL url = new URL("http://192.168.0.28:8080/WinSockWeb/WinSockForAndroid");
                HttpURLConnection http = (HttpURLConnection) url.openConnection();  //实例化连接对象
                http.setDoInput(true);  //可读可写
                http.setDoOutput(true);
                http.setUseCaches(false);  //不允许使用缓存
                http.setRequestMethod("POST");  //设置传输方式为 post
                http.connect();  //创建连接
                Log.i("TAG","创建连接成功");
    
                // (2)数据写入流发送至服务器
                OutputStream os = http.getOutputStream();
                OutputStreamWriter osw = new OutputStreamWriter(os);
                BufferedWriter bw = new BufferedWriter(osw);
                Log.i("TAG","创建json 对象");
                JSONArray jsonArray = new JSONArray();  //创建 json 对象
                JSONObject jsonObject = new JSONObject();
    
                jsonObject.put("username",user.getUsername());  //写入对象数据
                jsonObject.put("gender",user.getGender());
                jsonObject.put("age",user.getAge());
                jsonArray.put(jsonObject);
                bw.write(jsonArray.toString());
                bw.flush();
    
                // (3)数据读取流接收数据
                InputStream is = http.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
    
                String result = br.readLine();  //获取web 端返回的数据
                if (result.equals("succeed")) {  //如果返回数据为 succeed 处理成功,否则失败
                    flag = true;
                }
    
                // (4)关闭相关流
                if (os != null)  os.close();
                if (osw != null)  osw.close();
                if (is != null)  is.close();
                if (isr != null)  isr.close();
                if (br != null)  br.close();
                if (bw != null)  bw.close();
    
            } catch (Exception e){e.printStackTrace();}
            return flag;
        }
    }
    

    接受并解析

        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");  //设置编码方式
            response.setCharacterEncoding("utf-8");
            System.out.println("接收到请求");
    
            User user = null;  //初始化接收的传输对象为空
    
            //(1) 获取android 请求,对传输对象的数据进行处理
            InputStream is = request.getInputStream();
            InputStreamReader isr = new InputStreamReader(is,"utf-8");
            BufferedReader br = new BufferedReader(isr);
            String userjson = br.readLine();
    
            System.out.println("userjson:"+userjson.toString());  //输出 json 格式数据
    
            try {
                JSONArray userarr = new JSONArray(userjson);
                JSONObject userobj = userarr.getJSONObject(0);
    
                user = new User();  //实例化 user 对象,否则报空指针异常
                user.setUsername(userobj.getString("username"));
                user.setGender(userobj.getString("gender"));
                user.setAge(userobj.getInt("age"));
    
                System.out.println("该传输对象:\n"
                        +"姓名: "+user.getUsername()
                        +"\n性别: "+user.getGender()
                        +"\n年龄: "+user.getAge());
    
                // (2)返回结果,成功或失败
                OutputStream os = response.getOutputStream();
                OutputStreamWriter osw = new OutputStreamWriter(os,"utf-8");
                BufferedWriter bw = new BufferedWriter(osw);
    
    
                if (user != null) 
                    bw.write("succeed");
                else 
                    bw.write("error");
    
                bw.flush();
                if (os != null)  os.close();
                if (osw != null)  osw.close();
                if (is != null)  is.close();
                if (isr != null)  isr.close();
                if (br != null)  br.close();
                if (bw != null)  bw.close();
    
            } catch (Exception e){e.printStackTrace();}
        }
    
    

    示例demo

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题