Не работает при использовании ProGuard
Логкат ниже. что случилось?
07-24 10: 54: 13.529: E / AndroidRuntime (12130): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: AsyncTask # 3
07-24 10: 54: 13.529: E / AndroidRuntime (12130): java.lang.RuntimeException: произошла ошибка при выполнении doInBackground ()
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на android.os.AsyncTask $ 3.done (AsyncTask.java:299)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на java.util.concurrent.FutureTask $ Sync.innerSetException (FutureTask.java:273)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на java.util.concurrent.FutureTask.setException (FutureTask.java:124)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:307)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на java.util.concurrent.FutureTask.run (FutureTask.java:137)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): по адресу java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1076)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): по адресу java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:569)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на java.lang.Thread.run (Thread.java:856)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): вызвано: java.lang.AssertionError: недопустимая ссылка на переменную типа
07-24 10: 54: 13.529: E / AndroidRuntime (12130): в org.apache.harmony.luni.lang.reflect.ImplForVariable.resolve (ImplForVariable.java:113)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): в org.apache.harmony.luni.lang.reflect.ImplForVariable.getGenericDeclaration (ImplForVariable.java:127)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): в org.apache.harmony.luni.lang.reflect.ImplForVariable.hashCode (ImplForVariable.java:46)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): по адресу java.util.Arrays.hashCode (Arrays.java:1260)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на com.google.gson.internal. $ Gson $ Types $ ParameterizedTypeImpl.hashCode (SourceFile: 475)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на com.google.gson.reflect.TypeToken. (SourceFile: 64)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на com.gaozhi.wh.asynctask.MyAsyncTask $ 2 $ 1. (SourceFile: 78)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): at com.gaozhi.wh.asynctask.MyAsyncTask $ 2.call (SourceFile: 78)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на com.gaozhi.wh.asynctask.MyAsyncTask $ 2.call (SourceFile: 1)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на com.gaozhi.wh.utils.async.AsyncTaskUtils $ 2.doInBackground (SourceFile: 114)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на com.gaozhi.wh.utils.async.AsyncTaskUtils $ 2.doInBackground (SourceFile: 1)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на android.os.AsyncTask $ 2.call (AsyncTask.java:287)
07-24 10: 54: 13.529: E / AndroidRuntime (12130): на java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:305) 07-24 10: 54: 13.529: E / AndroidRuntime (12130) : ... еще 4
Я обнаружил, что причиной этой строки кода является ошибка.
info = GsonUtils.getMutileBean(result,new TypeToken() {}.getType());
public static T getMutileBean(String jsonData, Type type)
throws Exception {
return new Gson().fromJson(jsonData, type);
}
Но я должен был добавить конфигурацию Proguard для Gson
# Gson использует информацию общего типа, хранящуюся в файле класса, при работе с полями. Proguard
# удаляет такую информацию по умолчанию, поэтому настройте ее так, чтобы она сохранялась.
-keepattributes Подпись
# Для использования GSON @Expose аннотации
-keepattributesаннотирование
# Gson конкретные классы
-поддержите класс sun.misc.Unsafe {*; }
# -поддержите класс com.google.gson.stream. ** {*; }
# Классы приложений, которые будут сериализованы / десериализованы через Gson
-поддержите класс com.google.gson.examples.android.model. ** {*; }