在Android上发送HTTP请求一般有两种一种是HttpURLConnection,另一种是HttpClinet,由于httpClient存在API数量过多,扩展困难等缺点,不建议使用,并且在Android6.0系统中被移除。
以下是介绍HttpURLConnection的使用方法。
private void sendRequestWithHttp() {
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection httpURLConnection = null;
BufferedReader reader = null;
try {
URL url = new URL("http://www.baidu.com");//传入网络地址
httpURLConnection = (HttpURLConnection) url.openConnection();//
httpURLConnection.setRequestMethod("GET");//GET 获取数据
httpURLConnection.setConnectTimeout(8000);//链接超时时间
httpURLConnection.setReadTimeout(8000);//传递数据超时
InputStream inputStream = httpURLConnection.getInputStream();//获取数据流
//发送
// httpURLConnection.setRequestMethod("POST");
// DataOutputStream dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream());
// dataOutputStream.writeBytes("usename=admin&pass=123");
//读取数据
reader = new BufferedReader(new InputStreamReader(inputStream));//
StringBuffer stringBuffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
stringBuffer.append(line);
}
showResponse(stringBuffer.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
新建一个子线程是因为获取网络数据属于耗时操作,所以需要在子线程中进行,
private void showResponse(final String toString) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(toString);
Log.d("TAGT", "toString: " + toString);
}
});
}
通过runOnUiThread将子线程切换到主线程中去更新UI,Android不允许在子线程中更新UI 。
转发表明出处:https://blog.youkuaiyun.com/qq_35698774/article/details/107307473
android互助群:
感谢:郭霖的《第一行代码 第二版》