android - 使用改造和 rxjava 获取 JSON 数据
问题描述
我想使用改造和 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
我不知道这是哪里出了问题。请帮忙。
解决方案
你的类型
Observable<List<Data>> register();
是错的。因为 Json 的第一层不是 Array(而是带有 field 的对象data
,即数组)。您应该为外部结构创建类
public class Outer{
List<Data> data;
}
并在改造中指定,如可观察到的:
@GET("/bins/mxcsl/")
Observable<Outer> register();
推荐阅读
- reactjs - 如何修复 Material-UI Select w/MenuItem,其中 MenuItem 水平呈现?
- amazon-dynamodb - DynamoDB/Boto3 -- RecursionError: 调用 Python 对象时超出最大递归深度
- django - Django 和 python 文件在哪里?
- momentjs - 将 moment.js 对象发送到服务器但收到 Bad request(400) 错误
- java - 需要帮助 Java IntelliJ 不读取我的文件
- .net - TDS协议上的LOGIN7有什么合适的例子吗?
- python - 如果列表是字典中的值,则添加到python中的列表
- amazon-web-services - AWS KMS ARN 是一个秘密?
- javascript - 如何在数据表 laravel 中获取 dd-mm-yyyy 格式的日期
- python - 在没有冗余代码/文档字符串的情况下,在 python 类中转发/重定向方法/属性的最佳方法?