4. 执行第一个查询
要执行第一个查询,你需要创建一个ApolloClient
的实例并使用你的查询进行新的调用。
创建ApolloClient
在你的com.example.rocketreserver
包下创建一个名为Apollo.kt的新文件,并在其中创建一个ApolloClient
实例:
app/src/main/java/com/example/rocketreserver/Apollo.kt
import com.apollographql.apollo.ApolloClientval apolloClient = ApolloClient.Builder().serverUrl("https://apollo-fullstack-tutorial.herokuapp.com/graphql").build()
注意: apolloClient
是一个顶级 变量,以便稍后可以从应用的其它部分重用它以提高性能。重用 apolloClient
允许重用底层的 OkHttp 实例、相关线程池和连接。在真实应用中,您可能希望使用一个 依赖注入框架 来共享 ApolloClient。
创建 ApolloClient 简单到只需提供您的 GraphQL 后端端点。在我们的案例中是 https://apollo-fullstack-tutorial.herokuapp.com/graphql
。
执行查询
打开 LaunchList.kt
并更新 LaunchList
组合函数的内容。使用 apolloClient 和生成的 LaunchListQuery
执行一个新的 query:
app/src/main/java/com/example/rocketreserver/LaunchList.kt
@Composablefun LaunchList(onLaunchClick: (launchId: String) -> Unit) {LaunchedEffect(Unit) {val response = apolloClient.query(LaunchListQuery()).execute()Log.d("LaunchList", "Success ${response.data}")}
多亏了 Kotlin 协程,即使在代码看起来是同步的情况下,查询也将在一个后台线程中执行。
测试您的查询
运行应用。您应该在 logcat 输出中看到以下内容
(logcat)
2023-03-14 12:08:30.694 16611-16611/com.example.rocketreserverD/LaunchList: Success Data(launches=Launches(launches=[Launch(id=109, site=CCAFS SLC 40), Launch(id=108, site=VAFB SLC 4E),Launch(id=107, site=KSC LC 39A), Launch(id=106, site=CCAFS SLC40), Launch(id=105, site=CCAFS SLC 40), Launch(id=104, site=KSC LC 39A), Launch(id=103, site=KSC LC 39A), Launch(id=102,site=KSC LC 39A), Launch(id=101, site=CCAFS SLC 40), Launch(id=100, site=CCAFS SLC 40), Launch(id=99, site=KSC LC 39A),Launch(id=98, site=CCAFS SLC 40), Launch(id=97, site=CCAFS SLC40), Launch(id=96, site=CCAFS SLC 40), Launch(id=95, site=CCAFS SLC 40), Launch(id=94, site=KSC LC 39A), Launch(id=93,site=KSC LC 39A), Launch(id=92, site=KSC LC 39A), Launch(id=91, site=CCAFS SLC 40), Launch(id=90, site=CCAFS SLC 40)]))
这意味着请求已正确执行,现在您有一个发射场列表 🚀🚀🚀。
接下来,让我们将此数据连接到您的UI。