下面我将为你详细讲解“Android发送GET与POST请求的DEMO详解”这个主题,包括以下几个方面的内容:
- 什么是HTTP请求
- Android中发送HTTP请求的方式
- 完整示例:Android发送GET请求
- 完整示例:Android发送POST请求
什么是HTTP请求
HTTP(HyperText Transfer Protocol)是一种用于传输数据的协议,常用于万维网(WWW)上数据的传输。HTTP协议定义了浏览器和万维网服务器之间进行通信的规则,使得万维网能够进行通信和数据传输。
HTTP请求是指浏览器向服务器发出请求的过程,常用的请求方法有GET和POST。GET请求用于向服务器请求一份资源,并将其传输到客户端;POST请求则通常是向服务器提交表单数据,用于做数据的处理。
Android中发送HTTP请求的方式
在Android开发中,发送HTTP请求通常使用HttpURLConnection或HttpClient库,这些库都是Android SDK中自带的网络库。其中,HttpURLConnection具有简单易用、轻量级等特点,而HttpClient库则表现出更强大的定制性和兼容性。需要注意的是,从Android 6.0(API Level 23)开始,Android SDK已经不再推荐使用HttpClient库,所以我们在这里选择使用HttpURLConnection库进行示例介绍。
完整示例:Android发送GET请求
以下示例代码通过HttpURLConnection获取一个API的JSON数据,并使用Logcat将结果输出到控制台。
public class MainActivity extends AppCompatActivity {
private static final String API_URL = "https://api.github.com/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建新线程,发送GET请求
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(API_URL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// 读取响应
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
// 将响应结果输出到控制台
Log.d("MainActivity", "Response: " + response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
说明:
- 在主线程中无法进行网络请求操作,需要将网络请求操作放在新线程中;
- 通过
URL
类创建一个URL对象,传入API的URL地址; - 调用
openConnection()
方法返回一个URLConnection对象; - 将URLConnection强制转换为HttpURLConnection,以方便对HTTP请求进行配置;
- 设置HTTP请求方式为GET;
- 设置超时时间为5秒;
- 读取响应结果;
- 将响应结果转换为String类型,并通过Logcat输出。
完整示例:Android发送POST请求
以下示例代码通过HttpURLConnection向服务器提交表单数据,获取服务器响应的结果,并使用Logcat将结果输出到控制台。其中,我们使用了一个PHP脚本作为后台处理程序示例。
- PHP脚本代码:
<?php
$username = $_POST["username"];
$password = $_POST["password"];
echo "username: " . $username . ", password: " . $password;
?>
- Android代码:
public class MainActivity extends AppCompatActivity {
private static final String API_URL = "https://example.com/login.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建新线程,发送POST请求
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(API_URL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// 构造请求体
String params = "username=admin&password=123456";
byte[] postData = params.getBytes("UTF-8");
int postDataLength = postData.length;
// 设置请求头
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", Integer.toString(postDataLength));
// 写入请求体
connection.setDoOutput(true);
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.write(postData);
out.flush();
out.close();
// 读取响应
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
// 将响应结果输出到控制台
Log.d("MainActivity", "Response: " + response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
说明:
- 通过
URL
类创建一个URL对象,传入API的URL地址; - 调用
openConnection()
方法返回一个URLConnection对象; - 将URLConnection强制转换为HttpURLConnection,以方便对HTTP请求进行配置;
- 设置HTTP请求方式为POST;
- 设置超时时间为5秒;
- 构造请求体(
params
); - 将请求体转换为字节数组(
postData
); - 获取请求体长度并设置请求头(
Content-Type
和Content-Length
); - 打开输出流,并将请求体写入输出流,然后关闭流;
- 读取响应结果;
- 将响应结果转换为String类型,并通过Logcat输出。
以上就是关于“Android发送GET与POST请求的DEMO详解”的完整攻略及示例说明,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android发送GET与POST请求的DEMO详解 - Python技术站