Zim*_*Zim 5 api android kotlin retrofit2
我对 Kotlin、Android 和 OOP 都很陌生(自然-ADABAS 背景,从未接触过 Java、C++ 等),所以我非常绝望。
我有一个 API,其数据如下所示,是一组书籍详细信息:
API数据样本
我对数据模型感到困惑。我知道它应该看起来像 API 中的数据并返回一个数组,但是我到底如何在 Kotlin 中对其进行编码呢?然后我该如何解析它?我读过一些教程,但它们都有所不同。有些使用对象,有些使用类。
我也可能通过将所有内容都放在主要活动中来打破一些标准,但我还没有到达那部分。
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.http.GET
import retrofit2.http.Query
class MainActivity : AppCompatActivity()
{
private val api: RestAPI = RestAPI()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val apiGetBooks = api.getBooksList("token123123123")
val response = apiGetBooks.execute()
if (response.isSuccessful) {
val books = response.body()?.title
println(books)
} else {
println("error on API") // What do I do?
}
}
object Model {
val ResultArray : MutableList<BookProperties>? = null
}
data class BookProperties (val id: Int,val title: String, val coverURI: String, val pageURI: String, val pageCount: Int, val languageId: Int,val description: String, val isFree: Boolean) {
}
private val buriApi: MainActivity.BooksAPI? = null
class RestAPI {
private val buriApi: BooksAPI
init {
val retrofit = Retrofit.Builder()
.baseUrl("https://api.someurl.com")
.addConverterFactory(MoshiConverterFactory.create())
.build()
buriApi = retrofit.create(BooksAPI::class.java)
}
fun getBooksList(token: String): Call<BookProperties>{
return buriApi.getBooks(token)
}
}
fun getBooksList(token: String): Call<MainActivity.BookProperties> {
return buriApi!!.getBooks(token)
}
interface BooksAPI {
@GET("/v1/books")
fun getBooks (@Query("token")token: String) : Call<BookProperties>
}
}
Run Code Online (Sandbox Code Playgroud)
经过多次谷歌搜索,我终于解决了我的问题,这要归功于YouTube 上的How to Quickly Fetch Parse JSON with OkHttp and Gson。
fun fetchBooks () {
println("fetching books")
val url = "https://api.someurl.com/v1/books?"
val request = Request.Builder().url(url).build()
println(request)
val client = OkHttpClient()
client.newCall(request).enqueue(object: Callback {
override fun onResponse(call: Call?, response: Response?) {
val body = response?.body()?.string()
println(body)
}
override fun onFailure(call: Call?, e: IOException?) {
println("Failed to execute request")
e?.printStackTrace()
}
})
}
Run Code Online (Sandbox Code Playgroud)
仍然需要格式化数据并弄清楚如何在 Android 模拟器中打开 wifi,但至少我可以使用 JSON。
| 归档时间: |
|
| 查看次数: |
10345 次 |
| 最近记录: |