要从 Amadeus API 获取 JSON 结果,您需要遵循以下步骤。这里将使用 Kotlin 和 Android 的 Retrofit 库来简化网络请求的过程。以下是一个详细的指南:
首先,确保您的 Android 项目中包含必要的依赖项。
在 build.gradle
文件中添加 Retrofit 和 Gson 的依赖项:
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0' // 可选,用于日志记录
}
创建一个接口来定义 Amadeus API 的请求。假设您要获取航班信息,您可以创建一个名为 AmadeusApiService
的接口。
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Query
interface AmadeusApiService {
@GET("v2/shopping/flight-offers")
fun getFlightOffers(
@Query("origin") origin: String,
@Query("destination") destination: String,
@Query("departureDate") departureDate: String,
@Query("adults") adults: Int,
@Query("apikey") apiKey: String // 您的 API 密钥
): Call<FlightOffersResponse>
}
根据 Amadeus API 返回的 JSON 结构,创建数据模型类。例如,假设您要解析航班报价的响应:
data class FlightOffersResponse(
val data: List<FlightOffer>
)
data class FlightOffer(
val type: String,
val id: String,
val source: String,
val instantTicketingRequired: Boolean,
val nonHomogeneous: Boolean,
val oneWay: Boolean,
val lastTicketingDate: String,
val price: Price,
val itinerary: List<Itinerary>
)
data class Price(
val currency: String,
val total: String,
val base: String,
val fees: List<Fee>
)
data class Fee(
val amount: String,
val type: String
)
data class Itinerary(
val segments: List<Segment>
)
data class Segment(
val departure: Departure,
val arrival: Arrival,
val carrierCode: String,
val number: String,
val aircraft: String,
val duration: String
)
data class Departure(
val iataCode: String,
val at: String
)
data class Arrival(
val iataCode: String,
val at: String
)
在您的应用程序中,创建一个 Retrofit 实例:
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitClient {
private const val BASE_URL = "https://api.amadeus.com/"
val instance: AmadeusApiService by lazy {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
retrofit.create(AmadeusApiService::class.java)
}
}
在您的 Activity 或 ViewModel 中,使用 Retrofit 发起网络请求并处理响应:
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
fetchFlightOffers()
}
private fun fetchFlightOffers() {
val apiKey = "YOUR_API_KEY" // 替换为您的 API 密钥
val origin = "NYC"
val destination = "LAX"
val departureDate = "2023-12-01"
val adults = 1
RetrofitClient.instance.getFlightOffers(origin, destination, departureDate, adults, apiKey)
.enqueue(object : Callback<FlightOffersResponse> {
override fun onResponse(call: Call<FlightOffersResponse>, response: Response<FlightOffersResponse>) {
if (response.isSuccessful) {
val flightOffers = response.body()
Log.d("FlightOffers", flightOffers.toString())
} else {
Log.e("FlightOffers", "Error: ${response.errorBody()?.string()}")
}
}
override fun onFailure(call: Call<FlightOffersResponse>, t: Throwable) {
Log.e("FlightOffers", "Failure: ${t.message}")
}
})
}
}
确保您的 AndroidManifest.xml 文件中包含 Internet 权限:
<uses-permission android:name="android.permission.INTERNET"/>
现在,您可以运行应用程序并查看从 Amadeus API 获取的 JSON 结果。确保您使用有效的 API 密钥,并根据需要调整请求参数。
领取专属 10元无门槛券
手把手带您无忧上云