gpt4 book ai didi

android - 如何在 GSON TypeToken 类中使用自定义泛型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:45 29 4
gpt4 key购买 nike

我想将不同的列表集合传递给 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);

我的 Assets 文件夹中有 27 个 Json txt 文件,我想将这些 JSON txt 文件解析为它们适当的类。我应该怎么做?

已编辑:这样我就捕获了一个异常:

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

最佳答案

我这样解决了我的问题

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

在我的 Activity 中我有这段代码:

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

关于android - 如何在 GSON TypeToken 类中使用自定义泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668932/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com