江南少年
2020-04-02 09:12
采纳率: 36.4%
浏览 277

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

    点赞 评论

相关推荐 更多相似问题