2012-12-02 52 views
8

我想在GSON中將不同的列表集合傳遞給TypeToken類。這裏是我的類如何在GSON TypeToken類中使用自定義泛型?

public class ConvertToObject<T> { 


public T MappFrom(InputStream is) 
    String json = ConvertJsonInputStream.toString(is); 
    Gson gson = new Gson(); 
    Type typeOfDest = new TypeToken<T>() { 
    }.getRawType(); 
    T lstObject = gson.fromJson(json, typeOfDest); 
    return lstObject ; 
} 

} 

現在我想實例化不同的方式像我的這些類:

AssetManager am = getApplicationContext().getAssets(); 
InputStream is = am.open("form.txt"); 
ConvertToObject<List<Form>> co = new ConvertToObject<List<Form>>(); 
List<Form> JsonForm = co.MappFrom(is); 

InputStream is2 = am.open("Messages.txt"); 
ConvertToObject<List<Messages>> co = new ConvertToObject<List<Messages>>(); 
List<Messages> JsonForm = co.MappFrom(is2); 

我有我的資產文件夾27 Json的txt文件,我想分析這些JSON txt文件進入他們合適的班級。我應該怎麼做?

Editted: 這樣,我捕捉異常:

Caused by: java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to com.mypackage.Form 

回答

9

我解決我的問題,這樣

public class ConvertToObject<T> { 
    public List<T> mapFrom(InputStream is, Type typeOfDest) { 

     String json = ConvertJsonInputStream.toString(is); 

     Gson gson = new Gson(); 
     List<T> lstForm = gson.fromJson(json, typeOfDest); 

     return lstForm; 
} 

而且在我的活動我有這樣的代碼:

ConvertToObject<Menu> co = new ConvertToObject<Menu>(); 
    Type typeOfDest = new TypeToken<List<Menu>>() { 
    }.getType(); 

    AssetManager am = getResources().getAssets(); 
    Log.i("AssetManager", "AssetManager"); 
    InputStream is = null; 
    try { 
     is = am.open("menu.txt"); 
    } catch (IOException e) { 
     Log.i("InputStream", e.getMessage()); 
    } 
    List<Menu> JsonForm = co.mapFrom(is, typeOfDest); 
+2

非常好,謝謝分享answare。 –