【发布时间】:2018-12-29 01:48:01
【问题描述】:
我想使用改造和 rxjava 从 url https://api.myjson.com/bins/mxcsl/ 获取 json。 示例 json 是这样的:
{
"data": [
{
"itemId": "1",
"desc": "Batcave",
"audio": "https://storage.googleapis.com/a/17.mp3"
},
{
"itemId": "2",
"desc": "Fight Club rules",
"audio": "https://storage.googleapis.com/a/2514.mp3"
},
{
"itemId": "3",
"desc": "Make an offer",
"audio": "https://storage.googleapis.com/a/47.mp3"
}]}
这是我的代码: 数据模型:
public class Data {
private String itemId;
private String desc;
private String audio;
public String getItem() {
return itemId;
}
public String getDesc() {
return desc;
}
public String getAudio() {
return audio;
}}
这是界面:
public interface RequestInterface {
@GET("/bins/mxcsl/")
Observable<List<Data>> register();
}
我正在加载类似这样的内容:
private void loadJSON() {
RequestInterface requestInterface = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build().create(RequestInterface.class);
mCompositeDisposable.add(requestInterface.register()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(this::handleResponse,this::handleError));
}
private void handleResponse(List<Data> androidList) {
mAndroidArrayList = new ArrayList<>(androidList);
mAdapter = new DataAdapter(mAndroidArrayList);
mRecyclerView.setAdapter(mAdapter);
}
private void handleError(Throwable error) {
Toast.makeText(this, "Error "+error.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
}
但我也收到了错误应该是 BEGIN_ARRAY,但实际上是 BEGIN_OBJECT
我不知道这是哪里出了问题。请帮忙。
【问题讨论】:
-
因为你的json不是
List<Data>。它实际上是一个带有data键的对象,该对象是List<Data>
标签: android json rx-java retrofit