跳到主要内容

Android HTTP 请求

在 Android 开发中,HTTP 请求是实现应用与服务器通信的核心技术之一。无论是获取数据、提交表单,还是与 RESTful API 交互,HTTP 请求都是不可或缺的。本文将详细介绍如何在 Android 应用中使用 HTTP 请求,并提供实际代码示例。

什么是 HTTP 请求?

HTTP(超文本传输协议)是一种用于在客户端和服务器之间传输数据的协议。在 Android 应用中,客户端通常是你的应用,而服务器则是提供数据或服务的远程计算机。HTTP 请求通常包括以下部分:

  • 请求方法:如 GETPOSTPUTDELETE 等,用于定义操作类型。
  • URL:指定请求的目标地址。
  • 请求头:包含元数据,如内容类型、认证信息等。
  • 请求体:可选,用于发送数据(通常在 POSTPUT 请求中使用)。

使用 OkHttp 发送 HTTP 请求

OkHttp 是一个流行的开源库,用于在 Android 应用中发送 HTTP 请求。它简单易用,功能强大。

添加依赖

首先,在 build.gradle 文件中添加 OkHttp 依赖:

groovy
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
}

发送 GET 请求

以下是一个使用 OkHttp 发送 GET 请求的示例:

kotlin
import okhttp3.OkHttpClient
import okhttp3.Request

val client = OkHttpClient()

val request = Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build()

val response = client.newCall(request).execute()

if (response.isSuccessful) {
val responseBody = response.body?.string()
println(responseBody)
} else {
println("请求失败: ${response.code}")
}

发送 POST 请求

发送 POST 请求时,通常需要包含请求体。以下是一个示例:

kotlin
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody

val json = """
{
"title": "foo",
"body": "bar",
"userId": 1
}
""".trimIndent()

val requestBody = json.toRequestBody("application/json".toMediaType())

val request = Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts")
.post(requestBody)
.build()

val response = client.newCall(request).execute()

if (response.isSuccessful) {
val responseBody = response.body?.string()
println(responseBody)
} else {
println("请求失败: ${response.code}")
}
提示

在实际开发中,建议将网络请求放在后台线程中执行,以避免阻塞主线程。可以使用 AsyncTaskCoroutineWorkManager 等工具。

使用 Retrofit 简化 HTTP 请求

Retrofit 是另一个强大的库,它基于 OkHttp,并提供了更高级的抽象,使得发送 HTTP 请求更加简单。

添加依赖

build.gradle 文件中添加 Retrofit 依赖:

groovy
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}

定义 API 接口

使用 Retrofit 时,首先需要定义一个接口来描述 API:

kotlin
import retrofit2.Call
import retrofit2.http.*

interface ApiService {
@GET("posts/{id}")
fun getPost(@Path("id") id: Int): Call<Post>

@POST("posts")
fun createPost(@Body post: Post): Call<Post>
}

创建 Retrofit 实例并发送请求

kotlin
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

val retrofit = Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()

val apiService = retrofit.create(ApiService::class.java)

val call = apiService.getPost(1)
val response = call.execute()

if (response.isSuccessful) {
val post = response.body()
println(post)
} else {
println("请求失败: ${response.code()}")
}
备注

Retrofit 支持多种数据格式(如 JSON、XML)的转换,只需添加相应的转换器即可。

实际应用场景

场景 1:获取天气数据

假设你正在开发一个天气应用,需要从服务器获取实时天气数据。你可以使用 GET 请求从天气 API 获取数据:

kotlin
val request = Request.Builder()
.url("https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=London")
.build()

val response = client.newCall(request).execute()

if (response.isSuccessful) {
val weatherData = response.body?.string()
println(weatherData)
}

场景 2:用户登录

在用户登录时,通常需要发送 POST 请求以验证用户凭据:

kotlin
val json = """
{
"username": "user123",
"password": "password123"
}
""".trimIndent()

val requestBody = json.toRequestBody("application/json".toMediaType())

val request = Request.Builder()
.url("https://your-api.com/login")
.post(requestBody)
.build()

val response = client.newCall(request).execute()

if (response.isSuccessful) {
val authToken = response.body?.string()
println("登录成功,Token: $authToken")
}

总结

通过本文,你已经了解了如何在 Android 应用中使用 HTTP 请求与服务器通信。我们介绍了如何使用 OkHttp 和 Retrofit 发送 GETPOST 请求,并展示了实际应用场景。掌握这些技能后,你将能够轻松处理大多数网络通信需求。

附加资源与练习

继续练习并探索更多高级功能,如请求拦截器、缓存管理和错误处理,以提升你的 Android 开发技能!