0

我有一个应用程序向服务器发送 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 的列表,我不知道如何从中创建不同类型的对象。

有任何想法吗?

有人知道吗?谢谢

4

0 回答 0