2016-09-25 33 views
0

我有一個包含另一個對象,我想從一個片段發送到另一個,使用parcelable,就像一個對象:Parceler POJO到Parcelable失敗ParcelerRuntimeException

Fragment fragment = new Fragment(); 
Bundle bundle = new Bundle(); 
bundle.putParcelable(mykey, Parcels.wrap(MySubObj)); 
fragment.setArguments(bundle); 

的MyObj中的POJO的結構:

class MyObj { 
     String value; 
     MySubObj value2; 

     //geters & seters 

     @Parcel 
     class MySubObj { 
      String name; 
      int age; 
      ActivityDomain acdomani; 

      //geters & seters 

      @Parcel 
      public class ActivityDomain { 
       String name; 
       String field; 
       int countEmpl; 

       //geters & seters 
      } 
     } 
    } 

因此,在Parcels.wrap(MySubObj)我收到此錯誤:

org.parceler.ParcelerRuntimeException: Unable to find generated Parcelable class for com.mypakage.MyObj$MySubObj , verify that your class is configured properly and that the Parcelable class com.mypakage.MyObj$MySubObj$$Parcelable is generated by Parceler. 

我錯過了什麼?

回答

1

com.mypakage.MyObj$MySubObj$$Parcelable這個類在構建應用程序時會自動生成。如果找不到它,可能有兩個不同的原因:它從來沒有存在過,或者在Proguard的構建中被刪除。

所以一定要配置Proguard的正確

# Parcel library 
-keep interface org.parceler.Parcel 
-keep @org.parceler.Parcel class * { *; } 
-keep class **$$Parcelable { *; } 

而且不要忘了依賴關係的註解處理器

compile 'org.parceler:parceler-api:1.1.5' 
apt 'org.parceler:parceler:1.1.5' 
+0

如果我的廣告容易'org.parceler:parceler:1.1.5'我得到 '錯誤:(32,0)無法在org.gradle.api.internal.artifacts.dsl.dependencies類型的對象上找到參數[org.parceler:parceler:1.1.5]的方法apt() .DefaultDependencyHandler. –

+1

https://bitbucket.org/hvisser/andro ID-容易 – tynn