Gson缺少对象数组列表的类型参数

rdrgkggo  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(138)

我有一个JSON对象,它包含了“Contact”对象及其子对象的列表。我试图使用gson来获取JSON对象中Model对象的ArrayList,但它返回了缺少类型参数的异常。我获取的类型如下:
Type listType = new TypeToken<ArrayList<tModel>>() { }.getType();
并试图得到这样的列表:

GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();

ArrayList<Model> = gson.fromJson(jsonString, listType);

在我的proguard中,对象包是这样保存的:

-keep class .somerepo.contactModel.**{ *; }

我见过类似的问题,但没有一个能解决我的问题。
以下是堆栈跟踪:
致命异常错误:异步任务#2进程:运行时出现异常错误:在执行doInBackground()时发生错误。在执行doInBackground(java.util.concurrent.FutureTask.runWorker.runjava.lang.Thread.run。java.lang.RuntimeException:(源文件:62)在semereop.contact.Contact$1。(源文件:184)在some repo. contact.contact.geModelFromJson(源文件:184)中,您可以在此找到您想要的类型参数。
geModelFromJson方法从gson返回ArrayList<Model>

pzfprimi

pzfprimi1#

您必须向proguard文件添加更多信息:


# Gson uses generic type information stored in a class file when working with fields.

# Proguard removes such information by default, so configure it to keep all of it.

-keepattributes Signature
-keepattributes EnclosingMethod
-keepattributes InnerClasses
-keepattributes Annotation

# For using GSON @Expose annotation

-keepattributes *Annotation*

# Gson specific classes

-keep class sun.misc.Unsafe { *; }

# Application classes that will be serialized/deserialized over Gson

-keep class com.google.gson.examples.android.model.**{ *; }

有关更多详细信息,请检查GSON存储库中提供的Profuard文件的this example

相关问题