首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从Amadeus API (Kotlin Android)获取JSON结果

要从 Amadeus API 获取 JSON 结果,您需要遵循以下步骤。这里将使用 Kotlin 和 Android 的 Retrofit 库来简化网络请求的过程。以下是一个详细的指南:

1. 设置项目

首先,确保您的 Android 项目中包含必要的依赖项。

1.1 添加依赖项

build.gradle 文件中添加 Retrofit 和 Gson 的依赖项:

代码语言:javascript
复制
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' // 可选,用于日志记录
}

2. 创建 Retrofit 接口

创建一个接口来定义 Amadeus API 的请求。假设您要获取航班信息,您可以创建一个名为 AmadeusApiService 的接口。

代码语言:javascript
复制
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>
}

3. 创建数据模型

根据 Amadeus API 返回的 JSON 结构,创建数据模型类。例如,假设您要解析航班报价的响应:

代码语言:javascript
复制
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
)

4. 设置 Retrofit 实例

在您的应用程序中,创建一个 Retrofit 实例:

代码语言:javascript
复制
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)
    }
}

5. 发起网络请求

在您的 Activity 或 ViewModel 中,使用 Retrofit 发起网络请求并处理响应:

代码语言:javascript
复制
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}")
                }
            })
    }
}

6. 处理权限

确保您的 AndroidManifest.xml 文件中包含 Internet 权限:

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET"/>

7. 运行应用

现在,您可以运行应用程序并查看从 Amadeus API 获取的 JSON 结果。确保您使用有效的 API 密钥,并根据需要调整请求参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券