我有一个应用程序向服务器发送 REST 请求并接收 JSON 响应。但是,我在应用程序上的 REST 客户端服务可能会发送几种不同类型的 REST 请求,这将导致不同的响应,从而导致在客户端 android 应用程序上创建不同类型的对象。每个响应将始终是某种类型的对象的数组。
这是我到目前为止所拥有的:
@Override
protected List<?> doInBackground(String... urls) {
requestType = urls[0];
InputStream source = retrieveStream(Constants.REST_SERVER_URL + requestType);
Gson gson = new Gson();
Reader reader = new InputStreamReader(source);
List<?> result = gson.fromJson(reader, List.class);
return result;
}
protected void onPostExecute(List<?> result) {
if(requestType.equals(Constants.GET_OSM_POI_NODES)) {
Log.v(TAG, String.valueOf(result.size()));
ArrayList<Node> nodes = new ArrayList<Node>();
for(Object o : result) {
// create a node object from the result
}
}
}
在 onPostExecute 方法中,我想根据使用的 REST url 创建正确的对象。因此,例如,如果使用与 GET_OSM_POI_NODES 对应的 url,那么它将构造一个节点对象的 ArrayList,该对象由纬度和经度以及 id 组成。以下是此类对象的示例 JSON 响应:
[
{
"id": 353941,
"lat": 754030751,
"lon": -39701762
},
...
问题是传递给 onPostExecute 的结果总是一个通用对象列表,因为我希望它是通用的。我不确定如何从这些泛型类型创建 Node 对象。即使我不使用泛型,传递给 onPostExecute 的对象也是 StringMap 的列表,我不知道如何从中创建不同类型的对象。
有任何想法吗?
有人知道吗?谢谢