2012-01-28 62 views
1

我使用的應用程序是基於Web的,並且使用Json進行大部分通信。我正在優化代碼的過程中遇到了一些問題。Android - 傳遞.class到AsyncTask與Gson一起使用

以前,我所有的活動都使用AsyncTask的不同子類來調用webservices,他們以String的形式獲取響應,然後將其解析爲Json,最後使用Gson fromJson()方法創建Java對象。

我想把它縮小到一個可以被所有人使用的類。目前,我有我的doInBackground()..

@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; 
} 

所以我作爲參數傳遞一個String,它是要調用的方法和具有參數一個HashMap以下。調用Activity然後使用Gson將Json解析爲Java對象。

但是,由於一些響應可能相當大,我不希望Json在UI線程中解析,而是在AsyncTask中解析。爲了做到這一點,我需要將T.class參數傳遞給我的doInBackground()方法,因爲Gson()。fromJson()方法需要它。我的電話會是這樣的

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

我該如何做到這一點,這是在這裏最小化的正確方法?

+0

爲什麼不呢?在我看來很好。 – 2012-01-28 22:04:10

+0

但是,我如何獲得POJO.class作爲一個對象?從(Object ... params) – 2012-01-28 23:57:06

回答

1

Class<?>Object的子類型,所以您應該可以按原樣傳遞它。

+0

那麼這是令人尷尬的...我可以發誓我得到了類錯誤,這就是爲什麼我問這個問題。一定還沒有建立這個項目什麼的。 – 2012-01-29 03:51:30

+0

我已經通過將類傳遞給AsyncTask對象構造函數來完成解決方法。還有一件事...由於AsyncTask將用於應用程序中的任何操作,因此您認爲將類設爲靜態以便不必每次都調用新實例將是有利的。 – 2012-01-29 03:53:52