Android开发请求网络:HttpUrlConnection连接错误

在使用httpurlconnection发送请求的时候,需要注意的几个问题:

对于Android6.0以上的版本,要新建一个线程执行网络请求任务,不能在主线程执行, 如以下方式:
参考地址

   new Thread(new Runnable(){
                @Override
                public void run() {
                    //发送网络请求
                }
            }).start();

提示错误:No Network Security Config specified, using platform default
解决办法:

  1. 创建res/xml/network_security_config.xml
    文件,如下:
    Android开发请求网络:HttpUrlConnection连接错误_第1张图片
  2. 在文件中写入代码:


  

  1. 修改manifest配置文件

.....
  1. 不要忘了加入联网权限:

贴上我的一个发送post请求的代码:

//新建线程执行网络请求
    public static void upload(final String url, final JSONObject jsonobj){
        new Thread(new Runnable() {
            @Override
            public void run() {
                UploadUtil.uploadData(url,jsonobj);//上传数据的方法
            }
        }).start();
    }
    
//上传数据
//参数:服务器地址;json对象
    private static void uploadData(String serverUrl, JSONObject jsonobj){
        try{
            //封装参数
            StringBuilder stringBuilder=new StringBuilder();
            Iterator it=jsonobj.keys();//遍历json对象
            while (it.hasNext()) {
                String key = (String) it.next();
                String value = jsonobj.getString(key);
                stringBuilder.append(key).append("=").append(value);
                stringBuilder.append("&");
            }
            stringBuilder.deleteCharAt(stringBuilder.length()-1);//删除最后一个&
            String data=stringBuilder.toString();

            //网络连接
            URL url=new URL(serverUrl);
            HttpURLConnection conn=(HttpURLConnection)url.openConnection();
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setReadTimeout(5000);
            conn.setConnectTimeout(10000);

            OutputStream out=new DataOutputStream(conn.getOutputStream()) ;
            out.write(data.getBytes());
            out.close();
            if(conn.getResponseCode()==200){
                // 获取响应的输入流对象
                System.out.println(conn.getContent());
                InputStream in=conn.getInputStream();
                BufferedReader reader=new BufferedReader(new InputStreamReader(in));
                String line;
                while ((line=reader.readLine())!=null){
                    Log.d("success",line);
                }
                reader.close();
                conn.disconnect();
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }

你可能感兴趣的:(安卓开发)