2012-01-28 2 views
1

내 앱은 웹 기반이며 대부분의 통신에 Json을 사용합니다. 나는 코드를 최적화하는 과정에 있으며 문제가 발생했다.안드로이드 - Gson과 함께 사용하기 위해 .class를 AsyncTask에 전달합니다.

이전에는 모든 작업에서 AsyncTask의 개별 하위 클래스를 사용하여 webservices를 호출했으며 응답을 String으로 가져온 다음 Json으로 구문 분석하고 마지막으로 Gson fromJson() 메서드를 사용하여 Java 객체를 만듭니다.

저는 모두가 사용할 수있는 단일 클래스로 범위를 좁히려고합니다. 현재, 나는 내 doInBackground() .. 호출 할 수있는 방법과 매개 변수가있는 HashMap에있는 문자열을 매개 변수로

@Override 
protected JsonObject doInBackground(Object... params) { 

    String res = WebServices.httpGet(params[0]., (Map<String, String>) params[1]); 
    JsonParser parser = new JsonParser(); 
      JsonObject jsonObject = parser.parse(res); 
    return jsonObject; 
} 

그래서 내가 통과에 대해 다음 있습니다. 그런 다음 호출하는 Activity는 Gson을 사용하여 Json을 Java 객체로 구문 분석합니다.

그러나 응답의 일부가 꽤 클 수도 있기 때문에 Json을 UI 스레드에서 파싱하지 않고 AsyncTask로 파싱하는 것을 원하지 않습니다. 이를 위해서는 Gson(). fromJson() 메서드가 필요하기 때문에 어떻게 든 T.class 매개 변수를 doInBackground() 메서드에 전달해야합니다. 내 전화는 다음과 같을 것입니다

new AsyncJsonTask().execute("GetValues", parameterMap, POJO.class); 

어떻게해야합니까? 그리고 여기를 최소화 할 수있는 올바른 방법입니까?

+0

왜 안 되니? 나에게 좋아 보인다. –

+0

하지만 POJO.class를 객체로 얻는 방법은 무엇입니까 ?? From from (Object ... params) –

답변

1

Class<?>Object의 하위 유형이므로 그대로 전달할 수 있어야합니다.

+0

당황 스럽네요. 나는 클래스 캐스팅 오류를 얻고 있다고 맹세 했었습니다. 그래서 나는 질문을했습니다. 프로젝트 등을 만들지 않았어야합니다. –

+0

AsyncTask 개체 생성자를 통해 클래스 을 전달하여 해결 방법을 이미 수행했습니다. 또 다른 한 가지 ... AsyncTask는 앱의 모든 연산에 사용되므로 클래스를 정적으로 만들어 새로운 인스턴스를 매번 호출하지 않아도되는 것이 유리할 것이라고 생각하십니까? –

관련 문제