感谢您的帮助。
我有以下情况:
我有一个包含API响应的类:
public class EventsResponse extends ApiResponse {
public JSONArray response;
public EventsResponse(Boolean success,RequestHandle requesthandle, JSONArray responsefromapi) {
super(success, requesthandle);
if(responsefromapi!=null)this.response=responsefromapi;
else response=null;
}
public EventsResponse(Boolean success,RequestHandle requesthandle, JSONObject responsefromapi) {
super(success, requesthandle);
if(responsefromapi!=null)this.response=responsefromapi;
else response=null;
}
}
你可以看到有些东西在这里不起作用:
如果responsefromapi
是JSONObject
,我会尝试将其分配给response
JSONArray
显然不起作用...
我想做的是:
将responsefromapi
分配给response
并response
为JSONObject
或JSONArray
,具体取决于responsefromapi
。< / p>
这样我就可以使用sigle Class EventsResponse
来处理这两种情况,EventsResponse
将包含response
JSONObject
或JSONArray
,具体取决于情况。
请那可能吗?
由于
答案 0 :(得分:3)
尝试使用泛型:
public class EventsResponse<K> extends ApiResponse {
public K response;
public EventsResponse(Boolean success, RequestHandle requesthandle, K responsefromapi) {
super(success, requesthandle);
response = responsefromapi;
}
}
您可以这样称呼它:
new EventResponse<JSONObject>(...);
和
new EventResponse<JSONArray>(...);
答案 1 :(得分:2)
不是很优雅,但您可以尝试使用Object
常用超类来引用您的回复:
public Object response;
...
...
public EventsResponse(Boolean success,RequestHandle requesthandle, JSONArray responsefromapi) {
super(success, requesthandle);
if(response!=null)this.response= (Object)responsefromapi;
else response=null;
}
您需要Java的反射才能在代码中使用引用的对象:
if(response.getClass().equals(JSONArray.class)) {
...
...
JSONArray responseAsJSONArray = (JSONArray)response;
...
}
答案 2 :(得分:0)
@LisaAnne。我的理解如下: -
详细信息: -
根据我的理解,我们使用JSONObject来存储和传递JSON字符串的值,如{name:"LisaAnne", address:"xyz", responseArray:[{name1:"n1"},{name1:"n2"}]}.
JSONObject包含键值对,而
JSONArray包含一个有序对。如果将responseArray的值提取到JSONArray类型的对象中,您将获得成功。
从响应中获取数组,以下类型的语句应该起作用。
JSONArray response= bigDataResponse.getJSONArray("responseArray");
因此,无法从JSONObject直接转换为JSONArray。您将必须获取包含该数组的键并使用上面给出的语句来获取它。
如果您能够在JSONObject responsefromapi
和JSONArray responsefromapi
希望这有帮助。