サーバーに 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 が使用された場合、ID とともに緯度と経度で構成されるノード オブジェクトの ArrayList が作成されます。このようなオブジェクトに対する JSON 応答の例を次に示します。
[
{
"id": 353941,
"lat": 754030751,
"lon": -39701762
},
...
問題は、 onPostExecute に渡される結果が常に汎用オブジェクトのリストになることです。これは、汎用にしたいためです。これらのジェネリック型から Node オブジェクトを作成する方法がわかりません。ジェネリックを使用しなくても、onPostExecute に渡されるオブジェクトは StringMap のリストであり、これらからさまざまなタイプのオブジェクトを作成する方法がわかりません。
何か案は?
誰でも何か考えがありますか?ありがとう