kotlin plugins { id("com.squareup.sqldelight") version "1.5.0" } kotlin dependencies { implementation "com.squareup.sqldelight:runtime:1.5.0" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0" implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0" implementation "com.squareup.okhttp3:okhttp:4.9.1" } sql CREATE TABLE SearchResults ( id INTEGER PRIMARY KEY, title TEXT NOT NULL, url TEXT NOT NULL, snippet TEXT NOT NULL ); kotlin sqldelight { SearchData { packageName = "com.example.search.data" schemaOutputDirectory = file("src/main/kotlin") outputDialects = setOf(SqlDelightDatabase.SchemaOutput.JAVA) } } ./gradlew generateSearchDataSqlDelightInterface kotlin import okhttp3.HttpUrl import okhttp3.OkHttpClient import okhttp3.Request import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable class BaiduSearchService(private val apiKey: String) { private val client by lazy { OkHttpClient() } suspend fun search(query: String): List<SearchResult> { val url = buildUrl(query) val request = Request.Builder().url(url).build() val response = client.newCall(request).await() val responseBody = response.body()?.string() return parseSearchResults(responseBody) } private fun buildUrl(query: String): HttpUrl { return HttpUrl.Builder() .scheme("https") .host("api.baidu.com") .addPathSegment("search") .addQueryParameter("apikey", apiKey) .addQueryParameter("query", query) .build() } private fun parseSearchResults(responseBody: String?): List<SearchResult> { } } @Serializable data class SearchResult( @SerialName("title") val title: String, @SerialName("url") val url: String, @SerialName("snippet") val snippet: String ) kotlin import com.example.search.data.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext class SearchRepository(private val searchDataQueries: SearchDataQueries, private val baiduSearchService: BaiduSearchService) { suspend fun search(query: String) { withContext(Dispatchers.IO) { val searchResults = baiduSearchService.search(query) searchDataQueries.beginTransaction() searchDataQueries.clearSearchResults() searchDataQueries.insertSearchResults(searchResults.map { result -> SearchData.SearchResult( title = result.title, url = result.url, snippet = result.snippet ) }) searchDataQueries.commit() } } }


上一篇:
下一篇:
切换中文