试图将我的头缠在翻新上。我对此并不陌生,所以即使我已经观看了视频并在SO
上阅读了一下,也感到困惑。我添加了一些JSON
测试数据,如下所示:
[
{"name":"John","age":30,"vehicle":"bicycle"},
{"name":"Bob","age":32,"vehicle":"walking"}
]
它已经过验证,可以在以下地址找到:https://api.myjson.com/bins/lnjb8
已在manifest
和gradle
实现中添加了Internet权限。
我的interface
如下:
interface RetrofitCalls {
@get:GET("lnjb8")
val posts:Observable<List<RetrofitVariables>>
}
我有一个用于反序列化Json
中的constructor
数据的类:
class RetrofitVariables(var name: String, var age: Int, var vehicle: String) {}
然后在我的主类中,构建器如下所示:
var myRetrofit = Retrofit.Builder()
.baseUrl("https://api.myjson.com/bins/")
.addConverterFactory(GsonConverterFactory.create())
.build()
但是从这里开始,我对如何获取Json
数据一无所知。所以我的问题是,如何使用界面显示原始的Json
数据(控制台很好),以及如何反序列化Json
数据?
更新
我添加了这个:
在interface
中:
@GET("lnjb8")
fun findPosts(): Call<List<RetrofitVariables>>
在main
类中:
var repository = myRetrofit.create(RetrofitCalls::class.java)
val jsonVariables = repository.findPosts().execute().body()
jsonVariables!!.forEach { println("TAG " + it) }
这是正确的吗?它一直崩溃,我认为这与同步调用而不是异步调用有关。我在某处看到可以像在.enqueue()
中一样使用jasonVariables.enqueue()
,但是我不确定如何使用它。
答案 0 :(得分:0)
您在正确的道路上,快到了。现在您有了myRetrofit
,您需要使用它。您可以通过以下方式使用它:
val repository = myRetrofit.create(RetrofitCalls::class.java)
一旦有了repository
,就可以在其上调用方法。您的界面中没有任何方法,因此我不确定您的构造是否有效。对我有用的是:
interface RetrofitCalls {
@GET("lnjb8")
fun findPosts(): Call<List<RetrofitVariables>>
}
我使用过Call
,但如果您要进行异步调用,也许Observable
也可以使用。
如果您想要使用存储库的完整版本:
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.GET
data class RetrofitVariables(var name: String, var age: Int, var vehicle: String)
interface RetrofitCalls {
@GET("lnjb8")
fun findPosts(): Call<List<RetrofitVariables>>
}
var myRetrofit = Retrofit.Builder()
.baseUrl("https://api.myjson.com/bins/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val repository = myRetrofit.create(RetrofitCalls::class.java)
fun main(args: Array<String>) {
val call = repository.findPosts()
val variables = call.execute().body()
variables?.forEach {
println(it)
}
}
产生以下输出:
RetrofitVariables(name=John, age=30, vehicle=bicycle)
RetrofitVariables(name=Bob, age=32, vehicle=walking)