Java 让GsonConverterFactory解析某些字段?
给出以下JSON响应:Java 让GsonConverterFactory解析某些字段?,java,android,json,gson,retrofit2,Java,Android,Json,Gson,Retrofit2,给出以下JSON响应: { "status":true, "doc":[ { "_id":"9374", "t_id":"5678", "name":"Do calculus homework", "description":"Finish all assigned homework from chapters 1 and 2", "catego
{
"status":true,
"doc":[
{
"_id":"9374",
"t_id":"5678",
"name":"Do calculus homework",
"description":"Finish all assigned homework from chapters 1 and 2",
"category":"test",
"indexInList":0,
"priority":3,
"dateDue":1477291500000,
"user":"def",
"status":"ARCHIVED",
"__v":0,
"subtasks":[
{
"name":"Finish Chapter 1 - Derivatives",
"isCompleted":false
},
{
"name":"Finish Chapter 1 - Integrals",
"isCompleted":false
},
{
"name":"Finish Chapter 2 - Graphing",
"isCompleted":false
}
]
},
{
"_id":"429808",
"t_id":"1234",
"name":"Write machine learning essay",
"description":"Write essay on Bayesian networks",
"category":"test",
"indexInList":1,
"priority":3,
"dateDue":1477291500000,
"user":"abc",
"status":"ARCHIVED",
"__v":0,
"subtasks":[
{
"name":"Write introduction",
"isCompleted":false
},
{
"name":"Write body",
"isCompleted":false
},
{
"name":"Write Conclusion",
"isCompleted":false
}
]
}
]
}
我把它和改型2一起使用。我的服务类如下所示:
private HavocService(String baseUrl) {
//So network calls are async
RxJavaCallAdapterFactory rxAdapter = RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io());
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
final Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(client)
.addCallAdapterFactory(rxAdapter)
.addConverterFactory(GsonConverterFactory.create())
.build();
mHavocApi = retrofit.create(HavocAPI.class);
}
我实际上是在处理接收任务中获取数据:
rxHelper.manageSubscription(HavocService.getInstance().getHavocAPI().getAllTasks(userId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxTiPresenterUtils.deliverLatestToView(this))
.subscribe(mListOfTasks -> {
this.mListOfTasks = mListOfTasks;
getView().setTaskList(mListOfTasks);
}, throwable -> {
LogUtil.e("Error with something.");
})
);
如何让我的GSONConverterFactory在“doc”
数组中开始解析?我并不真正关心第一个“status”
字段
我这样做是因为我得到了以下错误:java.lang.IllegalStateException:应该是BEGIN\u数组,但在第1行第2列路径$
处是BEGIN\u对象。我很确定这是因为GSON试图解析第一项,而没有到达“doc”
数组
我感谢所有的帮助
编辑
下面是HavocAPI(我只关心getAllTasks()
现在是否工作。)
公共接口HavocAPI{
/**
*创建新任务
*
*@返回事务是否成功以及创建的任务的状态
*/
@标题({“接受:应用程序/json”,“内容类型:应用程序/json”})
@发布(“任务/创建/”)
可观察的createNewTask();
/**
*使用taskId删除指定的任务
*
*@param任务的taskID
*@交易的返回状态
*/
@标题({“接受:应用程序/json”,“内容类型:应用程序/json”})
@POST(“任务/删除/{task_id}/”)
可观察的deleteTask(@Path(“task_id”)字符串taskID);
/**
*更新任务
*
*@返回事务是否成功以及更新的任务的状态
*/
@标题({“接受:应用程序/json”,“内容类型:应用程序/json”})
@发布(“任务/更新/”)
可观测更新任务();
/**
*获取指定用户的所有任务
*
*@param用户的userId
*@从指定用户返回所有任务的列表
*/
@标题({“接受:应用程序/json”,“内容类型:应用程序/json”})
@获取(“任务/读取/{user_id}/”)
可观察的getAllTasks(@Path(“user_id”)字符串userId);
}
方法的返回类型不正确。您需要创建一个表示实际响应格式的新模型,然后通过它访问任务列表
class GetTasksResponse {
bool status;
@SerializedName("doc")
List<Task> tasks;
public List<Task> getTasks() {
return tasks;
}
}
类GetTasksResponse{
布尔状态;
@序列化名称(“文档”)
列出任务;
公共列表getTasks(){
返回任务;
}
}
方法的返回类型不正确。您需要创建一个表示实际响应格式的新模型,然后通过它访问任务列表
class GetTasksResponse {
bool status;
@SerializedName("doc")
List<Task> tasks;
public List<Task> getTasks() {
return tasks;
}
}
类GetTasksResponse{
布尔状态;
@序列化名称(“文档”)
列出任务;
公共列表getTasks(){
返回任务;
}
}
您需要向我们展示您的HavocAPI
接口和getAllTasks api的返回类型模型。问题很可能出在模型上。很抱歉。我不认为那是必要的。我已经更新了OP。您需要向我们展示您的HavocAPI
接口和getAllTasks api的返回类型模型。问题很可能出在模型上。很抱歉。我不认为那是必要的。我已经更新了OP。所以在我的API中,我会做一些类似的事情:Observable getAllTasks()
?所以在我的API中,我会做一些类似的事情:Observable getAllTasks()
?