Skip to content

Commit f0d8ed3

Browse files
committed
update
1 parent 110842c commit f0d8ed3

File tree

14 files changed

+151
-203
lines changed

14 files changed

+151
-203
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
22
plugins {
33
alias(libs.plugins.androidApp)
4+
45
alias(libs.plugins.kotlin.android)
56
alias(libs.plugins.kotlin.serialization)
67
alias(libs.plugins.kotlin.parcelize)
@@ -54,6 +55,7 @@ android {
5455
}
5556

5657
dependencies {
58+
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
5759

5860
implementation(libs.core.ktx)
5961
implementation(libs.lifecycle.runtime.ktx)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.wzq.jd.compose.app.data
2+
3+
import com.wzq.jd.compose.app.data.remote.CustomHttpClient
4+
import com.wzq.jd.compose.app.data.remote.RemoteDataRepo
5+
6+
/**
7+
* create by wzq on 2023/11/27
8+
*
9+
*/
10+
object DataRepos {
11+
12+
val remoteRepo by lazy { RemoteDataRepo(client = CustomHttpClient()) }
13+
14+
}

app/src/main/java/com/wzq/jd/compose/app/data/MainApi.kt

Lines changed: 0 additions & 87 deletions
This file was deleted.

app/src/main/java/com/wzq/jd/compose/app/data/NetworkUtil.kt

Lines changed: 0 additions & 46 deletions
This file was deleted.

app/src/main/java/com/wzq/jd/compose/app/data/RemoteDataRepo.kt

Lines changed: 0 additions & 54 deletions
This file was deleted.

app/src/main/java/com/wzq/jd/compose/app/data/model/SearchHotWords.kt renamed to app/src/main/java/com/wzq/jd/compose/app/data/model/HotWords.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import kotlinx.serialization.Serializable
77
*
88
*/
99
@Serializable
10-
data class SearchHotWords(
10+
data class HotWords(
1111
val id: Int,
1212
val link: String,
1313
val name: String,

app/src/main/java/com/wzq/jd/compose/app/data/model/NetResult.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,17 @@ data class NetResult<T>(
1212
val errorCode: Int,
1313
val errorMsg: String
1414
)
15-
15+
//
16+
//object KS: KSerializer<Any?> {
17+
// override val descriptor: SerialDescriptor
18+
// get() = TODO("Not yet implemented")
19+
//
20+
// override fun deserialize(decoder: Decoder): Any? {
21+
// return decoder.dec
22+
// }
23+
//
24+
// override fun serialize(encoder: Encoder, value: Any?) {
25+
// }
26+
//
27+
//
28+
//}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.wzq.jd.compose.app.data.remote
2+
3+
import io.ktor.client.HttpClient
4+
import io.ktor.client.engine.okhttp.OkHttp
5+
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
6+
import io.ktor.serialization.kotlinx.json.json
7+
import kotlinx.serialization.json.Json
8+
import okhttp3.logging.HttpLoggingInterceptor
9+
10+
/**
11+
* create by wzq on 2023/12/19
12+
*
13+
*/
14+
class CustomHttpClient {
15+
16+
private val client by lazy {
17+
createClient()
18+
}
19+
20+
suspend fun <T> doRequest(block: suspend HttpClient.() -> T) =
21+
runCatching { client.block() }.onFailure(defaultErrorHandler)
22+
23+
24+
private fun createClient() = HttpClient(OkHttp) {
25+
engine {
26+
config {
27+
followRedirects(true)
28+
}
29+
addInterceptor(HttpLoggingInterceptor().apply {
30+
level = HttpLoggingInterceptor.Level.BODY
31+
})
32+
33+
}
34+
35+
install(ContentNegotiation) {
36+
json(Json {
37+
prettyPrint = true
38+
isLenient = true
39+
ignoreUnknownKeys = true
40+
})
41+
}
42+
}
43+
44+
private val defaultErrorHandler = fun(exception: Throwable) {
45+
exception.printStackTrace()
46+
}
47+
48+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.wzq.jd.compose.app.data.remote
2+
3+
import com.wzq.jd.compose.app.data.model.ArticleItem
4+
import com.wzq.jd.compose.app.data.model.Categories
5+
import com.wzq.jd.compose.app.data.model.HotWords
6+
import com.wzq.jd.compose.app.data.model.NetResult
7+
import com.wzq.jd.compose.app.data.model.PagingResult
8+
import io.ktor.client.call.body
9+
import io.ktor.client.request.forms.submitForm
10+
import io.ktor.client.request.get
11+
import io.ktor.client.request.parameter
12+
import io.ktor.client.request.post
13+
import io.ktor.client.request.setBody
14+
import io.ktor.http.parametersOf
15+
16+
/**
17+
* create by wzq on 2023/12/1
18+
*
19+
*/
20+
class RemoteDataRepo(
21+
private val baseUrl: String = "https://www.wanandroid.com/",
22+
private val client: CustomHttpClient
23+
) {
24+
25+
suspend fun getArticleList(pageNum: Int = 0, cid: Int? = null) =
26+
client.doRequest<NetResult<PagingResult<ArticleItem>>> {
27+
get("${baseUrl}article/list/${pageNum}/json") {
28+
if (cid != null) this.parameter("cid", cid)
29+
}.body()
30+
}
31+
32+
suspend fun getProjectList(pageNum: Int = 0) =
33+
client.doRequest<NetResult<PagingResult<ArticleItem>>> { get("${baseUrl}article/listproject/$pageNum/json").body() }
34+
35+
suspend fun getKnowledgeCategories(): Result<NetResult<List<Categories>>> =
36+
client.doRequest { get("${baseUrl}tree/json").body() }
37+
38+
suspend fun getHotWords() = client.doRequest<NetResult<List<HotWords>>> {
39+
get("${baseUrl}hotkey/json").body()
40+
}
41+
42+
suspend fun getSearchResult(keywords: String) = client.doRequest {
43+
submitForm(
44+
"${baseUrl}article/query/0/json",
45+
parametersOf("k", keywords)
46+
).body<NetResult<PagingResult<ArticleItem>>>()
47+
}
48+
49+
suspend fun test() = client.doRequest<Unit> {
50+
this.post("") {
51+
setBody(parametersOf("a", "b"))
52+
}
53+
}
54+
}

app/src/main/java/com/wzq/jd/compose/app/page/categories/CategoriesViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import androidx.compose.runtime.mutableStateMapOf
44
import androidx.lifecycle.SavedStateHandle
55
import androidx.lifecycle.ViewModel
66
import androidx.lifecycle.viewModelScope
7-
import com.wzq.jd.compose.app.data.NetworkUtil
7+
import com.wzq.jd.compose.app.data.DataRepos
88
import com.wzq.jd.compose.app.data.model.ArticleItem
99
import com.wzq.jd.compose.app.data.model.Categories
1010
import kotlinx.coroutines.launch
@@ -25,7 +25,7 @@ class CategoriesViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
2525
return@launch
2626
}
2727
val cid = categories?.children?.get(index)?.id
28-
NetworkUtil.remoteRepo.getArticleList(cid = cid).onSuccess { result ->
28+
DataRepos.remoteRepo.getArticleList(cid = cid).onSuccess { result ->
2929
pagerData[index] = result.data.listData
3030
}
3131
}

0 commit comments

Comments
 (0)