2016-03-20 23 views
2

ile seri hale getirilemiyor Seri hale getirilmiş nesneyi Gson ile seri hale getirmeye çalıştığımda, aşağıdaki tuhaf hatayı alıyorum. Nesne, GSON lib

hata

kodumu bu bölümünde yaşananlar:

Log.i("read_json:", jsonSerializedString); 

Gladiator gladiator = gson.fromJson(jsonSerializedString, Gladiator.class); 

günlüğünde benim JSON Nesne görebilirsiniz ama bir şekilde Gladiator sınıfının bir örneğine bu serisini olamaz.

Seri hale getirilmiş nesnem geniş bir String'dir (12.000 karakter). Bu bir sorun olabilir mi?

JNI DETECTED ERROR IN APPLICATION: can't make objects of type com.adamvarhegyi.duelsofcodrer.model.clazzes.base.Gladiator: 0x12db3d30 
    in call to AllocObject 
    from java.lang.Object sun.misc.Unsafe.allocateInstance(java.lang.Class) "main" prio=5 tid=1 Runnable 
    | group="main" sCount=0 dsCount=0 obj=0x738392a0 self=0xb4d36500 
    | sysTid=2014 nice=0 cgrp=default sched=0/0 handle=0xb6f0db34 
    | state=R schedstat=(401798791 103148234 510) utm=32 stm=8 core=0 HZ=100 
    | stack=0xbe4dd000-0xbe4df000 stackSize=8MB 
    | held mutexes= "mutator lock"(shared held) 
    native: #00 pc 00370e01 /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::ArtMethod*, void*)+160) 
    native: #01 pc 0035046f /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+150) 
    native: #02 pc 0025a725 /system/lib/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+740) 
    native: #03 pc 0025adfd /system/lib/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+64) 
    native: #04 pc 000fd1d1 /system/lib/libart.so (art::ScopedCheck::AbortF(char const*, ...)+32) 
    native: #05 pc 00108349 /system/lib/libart.so (art::CheckJNI::AllocObject(_JNIEnv*, _jclass*)+584) 
    native: #06 pc 00254cb5 /data/dalvik-cache/arm/[email protected]@boot.oat (Java_sun_misc_Unsafe_allocateInstance__Ljava_lang_Class_2+96) 
    at sun.misc.Unsafe.allocateInstance(Native method) 
    at java.lang.reflect.Method.invoke!(Native method) 
    at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:48) 
    at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:223) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:206) 
    at com.google.gson.Gson.fromJson(Gson.java:879) 
    at com.google.gson.Gson.fromJson(Gson.java:844) 
    at com.google.gson.Gson.fromJson(Gson.java:793) 
    at com.google.gson.Gson.fromJson(Gson.java:765) 
    at com.adamvarhegyi.duelsofcodrer.storage.InternalStorage.newReadMethod(InternalStorage.java:40) 
    at com.adamvarhegyi.duelsofcodrer.storage.InternalStorage.readObject(InternalStorage.java:87) 
    at com.adamvarhegyi.duelsofcodrer.storage.GladiatorsDAO.getPlayer(GladiatorsDAO.java:34) 
    at com.adamvarhegyi.duelsofcodrer.fragment.etc.character.CharacterSheetFragment.onCreateView(CharacterSheetFragment.java:44) 
+0

bu sadece bir dize veya birçok özel nesne ile özel bir nesne –

+0

Özel nesne –

+0

Oku niteliklerini [bu] (http://www.acuriousanimal.com/2015/10/23/reading-json-file-in- olduğunu stream-mode-with-gson.html) –

cevap

2

Bir özet sınıfını veya bir arabirimi başlatmaya çalışırsanız, bu hata oluşabilir. Örneğinizde bu Gladiator sınıfı ile durum böyle olurdu. Gson, somut bir sınıfın örneklerini sadece serileştirebilir.

Gerçekten soyut bir sınıf kullanmanız gerekiyorsa, sınıf örneklerinizi serileştirmek için özel bir TypeAdapter veya JsonDeserializer kullanmak isteyebilirsiniz.