4. 执行你的第一个查询
要执行你的第一个查询,你需要创建一个ApolloClient
的实例,并使用你的查询进行新的调用。
创建 ApolloClient
在com.example.rocketreserver
包中创建一个名为Apollo.kt的新文件,并在其中创建ApolloClient
的实例:
app/src/main/java/com/example/rocketreserver/Apollo.kt
import com.apollographql.apollo3.ApolloClientval apolloClient = ApolloClient.Builder().serverUrl("https://apollo-fullstack-tutorial.herokuapp.com/graphql").build()
注意: apolloClient
是一个顶级变量,这样就可以在之后的程序其他部分重用它以提高性能。重用apolloClient
可以重用其底层的OkHttp实例和相关线程池以及连接。在实际应用中,你可能想要使用一个依赖注入框架来共享ApolloClient
。
创建GraphQL后端的端点即可创建ApolloClient。在我们的例子中是https://apollo-fullstack-tutorial.herokuapp.com/graphql
。
执行查询
打开 LaunchList.kt
并更新 LaunchList
可组合函数的内容。使用 apolloClient 和生成的 LaunchListQuery
执行新查询:
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。