在使用httpurlconnection发送请求的时候,需要注意的几个问题:
对于Android6.0以上的版本,要新建一个线程执行网络请求任务,不能在主线程执行, 如以下方式:
参考地址
new Thread(new Runnable(){
@Override
public void run() {
//发送网络请求
}
}).start();
提示错误:No Network Security Config specified, using platform default
解决办法:
- 创建res/xml/network_security_config.xml
文件,如下:
- 在文件中写入代码:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
- 修改manifest配置文件
<application ......android:networkSecurityConfig="@xml/network_security_config"> .....</application>
- 不要忘了加入联网权限:
<uses-permission android:name="android.permission.INTERNET" />
贴上我的一个发送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();
}
}