江南少年 2020-04-02 09:12 采纳率: 25%
浏览 338
已采纳

Android开发POST请求怎么使用?

Android开发中



麻烦各位大佬帮忙编写HTTP_POST类的send(String ip,String poems)方法,参数为服务器地址(String ip)和请求内容(String poems),用post请求访问服务器,send方法的返回值为服务器响应内容。



要求:不使用任何框架。



参数实例:

服务器地址(String ip)如:"http://192.168.1.100:8000/"

请求内容(String poems)如:"?username=1234&password=123456"



权限已经打开,麻烦各位大佬给出详细代码(从导包开始)和详细注释

  • 写回答

1条回答 默认 最新

  • 键盘舞者113 博客专家认证 2020-04-02 17:46
    关注

    用系统api就行了

     /**
         * POST请求
         *
         * @param url url
         * @param map 请求参数的map集合形式
         * @return
         */
        public static String post(final String url, final Map<String, String> map) {
            final StringBuilder sb = new StringBuilder();
            FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
                @Override
                public String call() throws Exception {
                    DataOutputStream out = null;
                    BufferedReader br = null;
                    URLConnection conn;
                    URL posturl = new URL(url);
                    try {
                        conn = posturl.openConnection();//创建连接
                        conn.setDoInput(true);//post请求必须设置
                        conn.setDoOutput(true);//post请求必须设置
                        out = new DataOutputStream(conn
                                .getOutputStream());//输出流
                        StringBuilder request = new StringBuilder();
                        for (String key : map.keySet()) {
                            request.append(key + "=" + URLEncoder.encode(map.get(key), "UTF-8") + "&");
                        }//连接请求参数
                        out.writeBytes(request.toString());//输出流写入请求参数
                        out.flush();
                        out.close();
                        br = new BufferedReader(new InputStreamReader(conn.getInputStream()));//获取输入流
                        String line;
                        while ((line = br.readLine()) != null) {
                            sb.append(line);
                        }
                        System.out.println(sb.toString());
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {//执行流的关闭
                        if (br != null) {
                            br.close();
                        }
                        if (out != null) {
                            out.close();
                        } }
                    return sb.toString(); }
            });
            String s = null;
            new Thread(task).start();
            try {
                s = task.get();//异步获取返回值
            } catch (Exception e) {
                e.printStackTrace();
            }
            return s;
        }
    }
    
    
    

    参考文章 :https://blog.csdn.net/tectrol/article/details/87348381

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏