2016-08-23 1 views
2

カスタムクラスを別のアクティビティに渡して、アクティビティマネージャがクラッシュするという問題があります。私はこのようなクラスを持っている:バンドルにオブジェクトを渡す - ClassNotFoundException

public class MyClass implements Serializable/Parcelable { 
    public final String a; 
    public final Long b; 
    public final Boolean c; 
} 


Intent intent = new Intent(getActivity(), TargetActivity.class); 
Bundle parameter = new Bundle(); 
parameter.putParcelable(TargetActivity.DATA_KEY, instance_of_my_class); 
startActivity(intent, parameter); 

私はSerializableなどParcelableの両方を試してみましたし、両方の方法は、同じ問題で失敗:ClassNotFoundException

これについては、setClassLoadersetExtrasClassLoaderをお勧めしますが、残念ながらそれは機能しません。例えば、私はparameter.setClassLoader(getClass().getClassLoader());を試した結果は同じでした。

誰もが解決策を知っていますか?第三者図書館がこれに影響を与える可能性はありますか? (私はプロジェクトにEventBusを持っている)

Parcelableの場合は、スタックトレースは次のようになります。Parcelableインタフェースを実装

08-23 14:40:37.086 1487-1783/system_process E/Parcel: Class not found when unmarshalling: com.example.MyClass 
                java.lang.ClassNotFoundException: com.example.MyClass 
                 at java.lang.Class.classForName(Native Method) 
                 at java.lang.Class.forName(Class.java:309) 
                 at java.lang.Class.forName(Class.java:273) 
                 at android.os.Parcel.readParcelableCreator(Parcel.java:2281) 
                 at android.os.Parcel.readParcelable(Parcel.java:2245) 
                 at android.os.Parcel.readValue(Parcel.java:2152) 
                 at android.os.Parcel.readArrayMapInternal(Parcel.java:2485) 
                 at android.os.BaseBundle.unparcel(BaseBundle.java:221) 
                 at android.os.BaseBundle.getString(BaseBundle.java:918) 
                 at android.app.ActivityOptions.<init>(ActivityOptions.java:570) 
                 at com.android.server.am.ActivityRecord.<init>(ActivityRecord.java:417) 
                 at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1482) 
                 at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:951) 
                 at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:3369) 
                 at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:3356) 
                 at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:139) 
                 at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2208) 
                 at android.os.Binder.execTransact(Binder.java:446) 
                Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.MyClass" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 
                 at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
                 at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
                 at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
                 at java.lang.Class.classForName(Native Method)  
                 at java.lang.Class.forName(Class.java:309)  
                 at java.lang.Class.forName(Class.java:273)  
                 at android.os.Parcel.readParcelableCreator(Parcel.java:2281)  
                 at android.os.Parcel.readParcelable(Parcel.java:2245)  
                 at android.os.Parcel.readValue(Parcel.java:2152)  
                 at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)  
                 at android.os.BaseBundle.unparcel(BaseBundle.java:221)  
                 at android.os.BaseBundle.getString(BaseBundle.java:918)  
                 at android.app.ActivityOptions.<init>(ActivityOptions.java:570)  
                 at com.android.server.am.ActivityRecord.<init>(ActivityRecord.java:417)  
                 at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1482)  
                 at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:951)  
                 at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:3369)  
                 at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:3356)  
                 at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:139)  
                 at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2208)  
                 at android.os.Binder.execTransact(Binder.java:446)  
                Suppressed: java.lang.ClassNotFoundException: com.example.MyClass 
                 at java.lang.Class.classForName(Native Method) 
                 at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
                 at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
                 at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
                  ... 19 more 
                Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 
+0

スタックトレースとは何ですか?どのクラスが見つからないのですか? Parcelableを実装するだけでは動作しないため、完全なクラス定義を表示してください。 –

+0

PARCELとCREATORを使用するコンストラクタはどこにありますか? – EpicPandaForce

+0

フルコードを追加してください。 –

答えて

関連する問題