2012-12-02 12 views
8

Chcę przekazać inną kolekcję list do klasy TypeToken w GSON. Oto moja klasaJak używać niestandardowego generic w klasie 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 ; 
} 

} 

Teraz chcę instancję moją klasę w inny sposób, takie jak:

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); 

Mam 27 JSON plik txt w folderze mojego majątku i chcę analizować te plik JSON txt w odpowiednie klasy. Jak mam to zrobić?

editted: ten sposób mogę złapać wyjątek:

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

Odpowiedz

9

I rozwiązać mój problem w ten sposób

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

A w mojej działalności Mam ten kod:

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

Bardzo dobrze, dziękuję za udostępnienie answare. –

Powiązane problemy