2012-12-02 34 views
8

Tôi muốn chuyển bộ sưu tập Danh sách khác nhau sang lớp TypeToken trong GSON. Đây là lớp học của tôiCách sử dụng tùy chỉnh chung trong lớp 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 ; 
} 

} 

Bây giờ tôi muốn nhanh chóng lớp học của tôi theo cách khác nhau Giống như những:

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

Tôi có 27 file txt Json trong thư mục tài sản của tôi và tôi muốn phân tích những tập tin JSON txt vào các lớp thích hợp của họ. Tôi nên làm như thế nào?

ngồi biên tập: Bằng cách này tôi bắt một ngoại lệ:

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

Trả lời

9

tôi giải quyết vấn đề của tôi theo cách này

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

Và trong hoạt động của tôi, tôi có mã này:

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

Rất tốt, cảm ơn bạn đã chia sẻ phần mềm answare. –

Các vấn đề liên quan