Я пишу на Kotlin и пытаюсь включить Retrofit2 в свой код, используя этот вызов: https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=Hello
Это мой интерфейс:
interface MyApiService {
companion object {
val myApiService by lazy {
RealiApiService.create()
}
private fun create(): MyApiService {
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("https://en.wikipedia.org/w/")
.build()
return retrofit.create(RealiApiService::class.java)
}
}
fun executeCall(call: Call<Any>) {
call.enqueue(object : Callback<Any> {
override fun onResponse(call: Call<Any>, response: Response<Any>) {
Log.d("response is ${response.body()}")
}
override fun onFailure(call: Call<Any>, t: Throwable) {
Log.d("Throwable is $t")
}
})
}
@GET("api.php")
fun searchArtist(@Query("action") action: String,
@Query("format") format: String,
@Query("list") list: String,
@Query("srsearch") srsearch: String):
Call<Any>
}
И это моя MainActivity:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
beginSearch("Hello")
}
private fun beginSearch(srsearch: String) {
val call = realiApiService.searchArtist("query", "json", "search", srsearch)
call.enqueue(object : Callback<Any> {
override fun onResponse(call: Call<Any>, response: Response<Any>) {
Log.d("response is ${response.body()}")
}
override fun onFailure(call: Call<Any>, t: Throwable) {
Log.d("Throwable is $t")
}
})
//myApiService.executeCall(call)
}
}
Код выше работает отлично.Заметьте, однако, у меня точно такой же код в beginSearch и в executeCall () MyApiService.Если я закомментирую строку и использую ее вместо того, что у меня есть сейчас, я получу «java.lang.IllegalArgumentException: методы службы не могут возвращать void.», И я не уверен, почему.Что я делаю не так?