后转换的Json我有这些类:AndroidAnnotations:@Rest错误出口
public class OfferList {
public List<Offer> offers;
}
public class Offer {
public String offer_id;
public String group_id;
public String n_hours;
public boolean is_new;
}
而且定义了这个服务:
@Rest(rootUrl = "http://MYURL/json", converters = { GsonHttpMessageConverter.class })
//if defined, the url will be added as a prefix to every request
public interface EscolasPertoDeMimRESTService {
@Get("/offers/{user_id}/{date}")
@Accept(MediaType.APPLICATION_JSON)
OfferList getOffers(String user_id, long date);
}
这是这里称为:
(...)
@RestService
OfferRestService offersService;
(...)
@Background
void loadListItems() {
mLoadingOffers = true;
showProgressDialog();
OfferList ol = null;
try {
ol = offersService.getOffers(myPrefs.userID().get(), myPrefs.lastCheckedForOffers().get());
showDebug("ol.offers.size(): " + ol.offers.size()); //OK shows ol.offers.size(): 24
Offer o = ol.offers.get(0); //After exporting: Crash
showDebug("ol.offers[0].group_id" + o.group_id);
} catch (Exception e) {
showDebug(e.getMessage()); //After exporting shows: "com.google.gson.internal.StringMap cannot be cast to com.humihara.escolaspertodemim.Offer"
}
setupAdapter(ol);
mLoadingOffers = false;
}
(...)
一切正常罚款在调试,但是当我出口和签署,应用程序崩溃。
GET已发送,服务器的响应是有效的JSON商品列表。 显然,我得到的结果是一个带StringMap(s)而不是Offer(s)的OfferList。
这是我的ProGuard-project.txt(我使用了Android SDK默认加上这些):
-keep public class com.humihara.escolaspertodemim.** { *; }
-keep public class org.springframework.** { *; }
-keep public class com.google.gson.** { *; }
-keep public class com.google.ads.** { *; }
-keep public class com.androidannotations.** { *; }
-keep public class org.acra.** { *; }
-keep public class * extends android.support.v4.app.FragmentActivity
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet); }
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int); }
-dontwarn org.simpleframework.**
-dontnote org.simpleframework.**
-dontwarn org.codehaus.jackson.**
-dontnote org.codehaus.jackson.**
-dontwarn com.fasterxml.jackson.**
-dontnote com.fasterxml.jackson.**
-dontwarn com.google.code.rome.**
-dontnote com.google.code.rome.**
-dontwarn org.apache.commons.httpclient.**
-dontnote org.apache.commons.httpclient.**
我已经搜索邮件列表,以及计算器,我拿起额外的定义,proguard的,但现在我不知道还有什么要做。 有人可以告诉我什么我必须改变我的代码或proguard-project.txt,使其工作?
UPDATE:
检查Jackson Json parser returns nulls on all object members on Android after optimizing with Proguard
后,我想我是缺少:
-dontskipnonpubliclibraryclassmembers
默认的Android proguard的定义:
-dontskipnonpubliclibraryclasses
而我却没有注意到他们不是'同样的表达。
我结束了这个proguard的-project.txt:
-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
-dontskipnonpubliclibraryclassmembers
-keep class com.humihara.escolaspertodemim.** { *; }
-keep public class * extends android.support.v4.app.FragmentActivity
-dontwarn org.simpleframework.**
-dontnote org.simpleframework.**
-dontwarn org.codehaus.jackson.**
-dontnote org.codehaus.jackson.**
-dontwarn com.fasterxml.jackson.**
-dontnote com.fasterxml.jackson.**
-dontwarn com.google.code.rome.**
-dontnote com.google.code.rome.**
-dontwarn org.apache.commons.httpclient.**
-dontnote org.apache.commons.httpclient.**
而现在一切工作正常。
。 – 2013-03-23 23:05:46
你说得对,我没有注意到它是在默认配置下。星号是通配符,因此该设置包含所有与注释相关的属性。成功配置中的关键设置可能是“-keepattributes Signature”。杰克逊似乎使用字段的完整通用签名来确定其内容。 – 2013-03-24 10:36:16
随着杰克逊2.1.4我需要这些属性:'-keepattributes Signature,EnclosingMethod','-keepnames class com.fasterxml.jackson。** {*; }','-dontwarn com.fasterxml.jackson.databind。**','-keep public class mydatapackage。** {*; }' – ashughes 2013-03-30 18:12:22