我与服务的集成已准备就绪,我可以在申请日志中看到我的数组,但我无法填写列表视图。
老实说,我已经尝试过我所知道的一切,我是kotlin的新手,语言让我有点困惑。有人可以确定错误的位置,我做错了。
JSON /请求:
{"0":{"id":1,"nome":"teste"},"1":{"id":2,"nome":"teste 2"}}
apiClient.kt
val service : ApiInterface
val URL = "json"
init {
val logging = HttpLoggingInterceptor()
logging.level = HttpLoggingInterceptor.Level.BODY
val httpClient = OkHttpClient.Builder()
httpClient.addInterceptor(logging)
val gson = GsonBuilder().setLenient().create()
val retrofit = Retrofit.Builder()
.baseUrl(URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(httpClient.build())
.build()
service = retrofit.create<ApiInterface>(ApiInterface::class.java)
}
ApiInterface.kt
@Headers("Accept: application/json")
@GET("/request")
fun getInstituicoes(): Observable<Instituicao>
Instituicao.kt(实体)
data class Instituicao(val id: Int, val nome: String)
InstituicaoActivity :: listview
listView = ListView(this)
setContentView(listView)
instituicao = ArrayAdapter(this, android.R.layout.simple_list_item_1, instituicoes)
listView?.adapter = instituicao
var api = ApiClient()
api.service.getInstituicoes()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
instituicao -> instituicoes.add("${instituicao.id} - ${instituicao.nome}")
}, {
e -> e.printStackTrace()
}, {
instituicao?.notifyDataSetChanged()
})
}
结果:(
0-null
答案 0 :(得分:1)
你的对象就是这个
{"0":
{"id":1,"nome":"teste"}
Gson希望只将这一部分解析为一个对象
{"id":1,"nome":"teste"}
由于它不能,它已返回null。
如果可能,您需要修复服务器代码以返回对象列表,而不是&#34;索引映射&#34;
服务器响应应为
[
{"id":1,"nome":"teste"},
{"id":2,"nome":"teste 2"}
]
修复服务器返回后,需要使用此
更新RetrofitObservable<List<Instituicao>>
如果这不可能,你需要研究为Gson制作自定义解析器并在Retrofit中注册它们
(...或手动解析您的JSON)