我在 Rick and Morty API 中開始請求時遇到問題。我試圖在除錯中啟動應用程式,但出現錯誤 404 我不明白為什么我收到 404 錯誤,因為基本 URL 是正確的。謝謝你的幫助!!
class MainActivity : AppCompatActivity() {
private val url = "https://rickandmortyapi.com/api/"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val retrofit = Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(MoshiConverterFactory.create())
.build()
val service = retrofit.create(ApiService::class.java)
val characterRequest = service.listCharacters()
characterRequest.enqueue(object : Callback<List<Character>> {
override fun onResponse(call: Call<List<Character>>, response: Response<List<Character>>
) {
val allCharacters = response.body()
if (allCharacters != null) {
Log.i("Success","HERE is ALL CHARACTERS FROM RICK AND MORTY:")
for (c in allCharacters)
Log.i("Success"," one character : ${c.name} : ${c.gender} ")
}
else (
Log.i("Error","Empty ")
)
}
override fun onFailure(call: Call<List<Character>>, t: Throwable) {
Log.e("Error", "KO")
}
})
服務:
interface ApiService {
@GET("character")
fun listCharacters(): Call<List<Character>>
}
人物類:
class Character(val name : String , val gender : String) {
}
我的依賴:
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
testImplementation 'junit:junit:4. '
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-moshi:2.9.0"
implementation "com.squareup.okhttp3:okhttp:4.9.3"
}
uj5u.com熱心網友回復:
我猜錯誤在于您定義listCharacters方法的回應型別的方式。回應型別不應List<Character>與您定義的一樣。嘗試下一個方法:
interface ApiService {
@GET("character")
fun listCharacters(): Call<ApiResponse>
}
data class ApiResponse(val results: List<Character>)
characterRequest.enqueue(object : Callback<ApiResponse> {
override fun onResponse(call: Call<ApiResponse>, response: Response<ApiResponse>
) {
val apiResponse: ApiResponse? = response.body()
// use apiResponse
}
override fun onFailure(call: Call<ApiResponse>, t: Throwable) {
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/402362.html
標籤:
