응답 클래스를 일반화하려고합니다. 문제는 유형이 Brewer가 아닌 com.google.gson.internal.LinkedTreeMap 유형의 List를 반환한다는 것입니다. 이 모든 시작Arraylist는 Brewer 대신 LinkedTreeMap 유형입니다.
기능 :
List<Brewer> brewerList = null;
try {
Response<Brewer> responseHandler = new Response<Brewer>();
brewerList = responseHandler.getAll(response);
functionCallBack = Constants.FUNCTION_DB_BREWER;
list = brewerList.toArray(new Brewer[brewerList.size()]);
} catch (IOException e) {
Tools.LOG_ERROR(e);
}
이 내 응답 클래스 :
public class Response<T> {
public List<T> getAll(JSONObject response) throws IOException {
List<T> brewerList = null;
// Map JSON to JAVA Objects
Type listResponse = new TypeToken<ListResponse<T>>() {
}.getType();
ListResponse<T> responseObject = Shared.gson.fromJson(response.toString(), listResponse);
if (responseObject != null) {
// Status, Message, Data
int status = responseObject.getStatus();
Tools.LOG_DEBUG("Response - getAll, Status: " + status);
if (responseObject.getData() != null && responseObject.getStatus() == 200) {
brewerList = responseObject.getData();
} else {
Tools.LOG_DEBUG("Couldn't find the webservices!");
}
}
return brewerList;
}
}
그리고 이것은 내가 JSON에서 분석 할 줄 내 데이터 클래스입니다
public class ListResponse<T> {
private int status;
private List<T> data;
public ListResponse() {
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
}
예외 :
04-11 10:54:55.994 31660-31660/be.appmax.ktsjjt E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ArrayStoreException: source[0] of type com.google.gson.internal.LinkedTreeMap cannot be stored in destination array of type be.appmax.ktsjjt.models.Brewer[]
at java.lang.System.arraycopy(Native Method)
at java.util.ArrayList.toArray(ArrayList.java:523)
at be.appmax.ktsjjt.database.SyncHandler.onRestTaskCompleted(SyncHandler.java:96)
at be.appmax.ktsjjt.webservices.WSBrewer$1.onSuccess(WSBrewer.java:36)
at com.loopj.android.http.JsonHttpResponseHandler$1$1.run(JsonHttpResponseHandler.java:125)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)
유형 삭제로 인해 자바에서이를 수행 할 수 없기 때문에. 'T'는 알려지지 않았습니다. –