2017-12-26 10 views
0

Ich habe eine App, die eine MainActivity enthält, die eine Registerkartenansicht enthält und ein anderes Fragment für jede Registerkarte hostet. Dieser Mechanismus funktioniert über einen SectionPageAdapter, der einen FragmentPageAdapter erweitert.Parcelable hat IOException beim Schreiben serialisierbaren Objekts, wenn ich nichts serialisiert

eine der Registerkarten bringt eine GeneralSearchFragment

public class GeneralSearchFragment extends Fragment { 

public GeneralSearchFragment(){ 

} 

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
    final ConstraintLayout constraintLayout = (ConstraintLayout) inflater.inflate(R.layout.fragment_searchtab, container, false); 


    ((ImageView)constraintLayout.findViewById(R.id.searchByName)).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(); 
      intent.setClass(getActivity(), FreeSearchActivity.class); 
      startActivity(intent); 
     } 
    }); 

    return constraintLayout; 
} 

}

Wie ich auf ein Bild klicken, sollte meinen Code wieder eine neue Aktion starten. In meinem Code übergebe ich nichts an die Aktivität, daher verstehe ich nicht, woher der Serialisierungsfehler kommt. Die einzige Zeit, zu der ich etwas serialisiere, ist, wenn ich eine Liste von Elementen an ein Fragment durch ein Bündel weitergebe. Aber wie ist das mit dem, was hier passiert, verbunden?

Dank einem Haufen

Btw verstehe ich das Problem der logcat zeigt, wenn ich in der Tat war versucht, es hier zu serialisieren. Das einzige Mal, dass ich dieses Objekt serialisiere (das tatsächlich ein Zeichen enthält), ist auf einem anderen Fragment und es funktioniert gut. Es gibt mir keinen Fehler. Der ziehbare btw kommt von Ressourcen

Logcat

12-26 08:17:52.853 5129-5129/com.chronocrops.chronocropps E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.chronocrops.chronocropps, PID: 5129 
                     java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.chronocrops.chronocropps.Model.Crop) 
                      at android.os.Parcel.writeSerializable(Parcel.java:1822) 
                      at android.os.Parcel.writeValue(Parcel.java:1770) 
                      at android.os.Parcel.writeList(Parcel.java:926) 
                      at android.os.Parcel.writeValue(Parcel.java:1719) 
                      at android.os.Parcel.writeArrayMapInternal(Parcel.java:838) 
                      at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542) 
                      at android.os.Bundle.writeToParcel(Bundle.java:1232) 
                      at android.os.Parcel.writeBundle(Parcel.java:878) 
                      at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:157) 
                      at android.os.Parcel.writeTypedArray(Parcel.java:1462) 
                      at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:617) 
                      at android.os.Parcel.writeParcelable(Parcel.java:1791) 
                      at android.os.Parcel.writeValue(Parcel.java:1697) 
                      at android.os.Parcel.writeArrayMapInternal(Parcel.java:838) 
                      at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542) 
                      at android.os.Bundle.writeToParcel(Bundle.java:1232) 
                      at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4604) 
                      at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3934) 
                      at android.os.Handler.handleCallback(Handler.java:790) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:164) 
                      at android.app.ActivityThread.main(ActivityThread.java:6494) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
                     Caused by: java.io.NotSerializableException: android.graphics.drawable.BitmapDrawable 
                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1233) 
                      at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1597) 
                      at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1558) 
                      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1481) 
                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1227) 
                      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) 
                      at android.os.Parcel.writeSerializable(Parcel.java:1817) 
                      at android.os.Parcel.writeValue(Parcel.java:1770)  
                      at android.os.Parcel.writeList(Parcel.java:926)  
                      at android.os.Parcel.writeValue(Parcel.java:1719)  
                      at android.os.Parcel.writeArrayMapInternal(Parcel.java:838)  
                      at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542)  
                      at android.os.Bundle.writeToParcel(Bundle.java:1232)  
                      at android.os.Parcel.writeBundle(Parcel.java:878)  
                      at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:157)  
                      at android.os.Parcel.writeTypedArray(Parcel.java:1462)  
                      at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:617)  
                      at android.os.Parcel.writeParcelable(Parcel.java:1791)  
                      at android.os.Parcel.writeValue(Parcel.java:1697)  
                      at android.os.Parcel.writeArrayMapInternal(Parcel.java:838)  
                      at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542)  
                      at android.os.Bundle.writeToParcel(Bundle.java:1232)  
                      at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4604)  
                      at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3934)  
                      at android.os.Handler.handleCallback(Handler.java:790)  
                      at android.os.Handler.dispatchMessage(Handler.java:99)  
                      at android.os.Looper.loop(Looper.java:164)  
                      at android.app.ActivityThread.main(ActivityThread.java:6494)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)  

EDIT:

/** * A {} @link FragmentPagerAdapter, die ein Fragment zu * einen der Abschnitte/tabs entsprechenden Rückkehr/Seiten. */ public class SectionsPagerAdapter erweitert FragmentPagerAdapter {

public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 
    // Mudar o retorno do getItem de acordo com a position 
    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     if(position == 0){ 
      return new CalendarFragment(); 
     }else if(position == 1){ 
      Bundle bundle = new Bundle(); 
      bundle.putSerializable("crops",crops); 
      CropListFragment cropListFragment = new CropListFragment(); 
      cropListFragment.setArguments(bundle); 
      return cropListFragment; 
     }else if(position == 2){ 
      return new GeneralSearchFragment(); 
     } 
     // Should'nt reach here 
     return null; 
    } 

Crop Beispiel:

Crop abacaxi = new Crop("Harvest begins in 10th of June", 
       getResources().getDrawable(R.drawable.abacax1), 
       "Marvila", 
       "Ananas comosus"); 

Crop Objekt

public class Crop implements Serializable { 

    private String specieHarvest; 
    private Drawable specieImage; 
    private String specieLocation; 
    private String specieName; 

    public Crop(String specieHarvest, Drawable specieImage, String specieLocation, String specieName) { 
     this.specieHarvest = specieHarvest; 
     this.specieImage = specieImage; 
     this.specieLocation = specieLocation; 
     this.specieName = specieName; 
    } 

    public String getSpecieHarvest() { 
     return specieHarvest; 
    } 

    public Drawable getSpecieImage() { 
     return specieImage; 
    } 

    public String getSpecieLocation() { 
     return specieLocation; 
    } 

    public String getSpecieName() { 
     return specieName; 
    } 
} 

Antwort

0

So habe ich eine Antwort auf das Problem. Diese Antworten haben basieren auf den zu diesem Beitrag gegebenen Antworten:

Why is it possible to pass a Drawable trough a Bundle from one Activity to a Fragment?

Die Antwort ist einfach, als wenn Objekte als Argumente an ein Fragment vorbei wird es nicht dazu führen, Marshled werden. Dies bedeutet, dass es nicht serialisiert/deserialisiert werden würde, wenn die Fragment nicht zerstört wird. Und in diesem Fall wird er zerstört, wenn ich versuche, eine neue Activity zu starten. Ich habe DrawableDrawable war serialisierbar Ursache, weil ich keine Fehler bekam, während ich in der Fragment war, wenig wusste ich, dass ich mit dem gleichen Objekt (Referenz) selbst beschäftigt war.

Verwandte Themen