2012-12-02 6 views
8

GSONで異なるListコレクションを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を共有していただきありがとうございます。 –

関連する問題