Gson缺少对象ArrayList的类型参数

Zah*_*Sdg 1 java android proguard gson

我有这个JSON对象,其中包含"Contact"对象列表及其子对象.我试图用GSON得到ArrayListModel物体在我的JSON对象,但它返回缺少类型的参数异常.我得到这样的类型:

Type listType = new TypeToken<ArrayList<tModel>>() { }.getType();

并尝试获取这样的列表:

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

ArrayList<Model> = gson.fromJson(jsonString, listType);
Run Code Online (Sandbox Code Playgroud)

在我的proguard中,我保留了这样的对象包:

-keep class .somerepo.contactModel.** { *; }
Run Code Online (Sandbox Code Playgroud)

我见过类似的问题,但没有一个能解决我的问题.

这是堆栈跟踪:

致命异常:AsyncTask#2进程:...,PID:10360 java.lang.RuntimeException:在java.util的android.os.AsyncTask $ 3.done(AsyncTask.java:300)执行doInBackground()时发生错误. concurrent.FutureTask.finishCompletion(FutureTask.java:355)在java.util.concurrent.FutureTask.setException(FutureTask.java:222)在java.util.concurrent.FutureTask.run(FutureTask.java:242)在android.os .AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)引起:java.lang.RuntimeException:缺少类型参数.在com.google.gson.reflect.TypeToken.getSuperclassTypeParameter(的SourceFile:84)在com.google.gson.reflect.TypeToken(的SourceFile:62).在1 semereop.contact.Contact $(的SourceFile:184)在somerepo.contact .Contact.geModelFromJson(的SourceFile:184)

geModelFromJson方法ArrayList<Model>从gson 返回.

All*_*ira 6

您必须向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.** { *; }
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看GSON存储库中提供的Proguard文件示例.