获取GsonConverterFactory来解析某些字段?

鉴于以下JSON响应:获取GsonConverterFactory来解析某些字段?

{ 

"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

}

]

}

]

}

我与Retrofit2一起用这个。我的服务类看起来是这样的:

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);

}

,我实际处理中获得的RX任务数据:

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: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $。我很确定这是因为GSON试图解析第一个项目而不是"doc"阵列。

我感谢任何和所有的帮助!

编辑

这里是HavocAPI (我只关心getAllTasks()现在的工作。)

public interface HavocAPI { 

/**

* Creates a new Task

*

* @return status of whether or not the transaction was successful and the task that was created

*/

@Headers({"Accept: application/json", "Content-Type: application/json"})

@POST("task/create/")

Observable<List<Object>> createNewTask();

/**

* Deletes a specified Task using the taskId

*

* @param taskID of the task

* @return status of transaction

*/

@Headers({"Accept: application/json", "Content-Type: application/json"})

@POST("task/delete/{task_id}/")

Observable<Boolean> deleteTask(@Path("task_id") String taskID);

/**

* Updates a Task

*

* @return status of whether or not the transaction was successful and the task that was updated

*/

@Headers({"Accept: application/json", "Content-Type: application/json"})

@POST("task/update/")

Observable<List<Object>> updateTask();

/**

* Gets all Tasks by a specified User

*

* @param userId of the user

* @return list of all Tasks from the specified User

*/

@Headers({"Accept: application/json", "Content-Type: application/json"})

@GET("task/read/{user_id}/")

Observable<List<Task>> getAllTasks(@Path("user_id") String userId);

}

回答:

getAllTasks()方法的返回类型不正确。您需要创建一个代表实际响应格式的新模型,然后通过它访问任务列表。

class GetTasksResponse { 

bool status;

@SerializedName("doc")

List<Task> tasks;

public List<Task> getTasks() {

return tasks;

}

}

以上是 获取GsonConverterFactory来解析某些字段? 的全部内容, 来源链接: utcz.com/qa/260313.html

回到顶部