Parcelable का सामना करना पड़ा IOException लेखन क्रमिक वस्तु getactivity ()


171

तो मैं इस logcat में हो रही है:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student)

मुझे यह पता है कि मेरा छात्र वर्ग अनुक्रमित नहीं है, लेकिन यह है, यहाँ मेरा छात्र वर्ग है:

import java.io.Serializable;


public class Student implements Comparable<Student>,  Serializable{

    private static final long serialVersionUID = 1L;
    private String firstName, lastName;
    private DSLL<Grade> gradeList; 

    public Student() {
        firstName = "";
        lastName = "";
        gradeList = new DSLL<Grade>();
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public DSLL<Grade> getGradeList() {
        return gradeList;
    }

    public void setGradeList(DSLL<Grade> gradeList) {
        this.gradeList = gradeList;
    }

    public int compareTo(Student arg0) {
        return this.lastName.compareTo(arg0.getLastName());
    }

}

और यह वह कोड है जो getIntent () विधि का उपयोग कर रहा है:

public void onItemClick(AdapterView<?> parent, View viewClicked, int pos,
                                long id) {

                            Student clickedStudent = studentList.get(pos);
                            int position = pos;
                            Intent intent = new Intent(getActivity().getApplicationContext(), ShowStudentActivity.class);
                            Log.e("CINTENT","CREATED!!!");
                            intent.putExtra("clickedStudent",clickedStudent);
                            intent.putExtra("newStudentList",newStudentList);
                            intent.putExtra("position",position);
                            Log.e("putExtra","Passed");
                            Log.e("Start activity","passed");
                            startActivity(intent);

                        } 

                    });

कृपया मुझे यह पता लगाने में मदद करें कि इसमें क्या गलत है।

यहाँ पूरा LogCat है:

04-17 16:12:28.890: E/AndroidRuntime(22815): FATAL EXCEPTION: main
04-17 16:12:28.890: E/AndroidRuntime(22815): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.os.Parcel.writeSerializable(Parcel.java:1181)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.os.Parcel.writeValue(Parcel.java:1135)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.os.Parcel.writeMapInternal(Parcel.java:493)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.os.Bundle.writeToParcel(Bundle.java:1612)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.os.Parcel.writeBundle(Parcel.java:507)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.content.Intent.writeToParcel(Intent.java:6111)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1613)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1422)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.app.Activity.startActivityForResult(Activity.java:3191)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:848)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.support.v4.app.Fragment.startActivity(Fragment.java:878)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at com.example.student_lists.MainActivity$DummySectionFragment$2.onItemClick(MainActivity.java:477)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.widget.AdapterView.performItemClick(AdapterView.java:292)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.widget.AbsListView.performItemClick(AbsListView.java:1058)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.widget.AbsListView$1.run(AbsListView.java:3168)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.os.Handler.handleCallback(Handler.java:605)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.os.Looper.loop(Looper.java:137)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.app.ActivityThread.main(ActivityThread.java:4447)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.lang.reflect.Method.invokeNative(Native Method)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.lang.reflect.Method.invoke(Method.java:511)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at dalvik.system.NativeStart.main(Native Method)
04-17 16:12:28.890: E/AndroidRuntime(22815): Caused by: java.io.NotSerializableException: com.resources.student_list.DSLL$DNode
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
04-17 16:12:28.890: E/AndroidRuntime(22815):    at android.os.Parcel.writeSerializable(Parcel.java:1176)

अपने अपवाद से जुड़े पूरे जावा स्टैक ट्रेस की जांच करने के लिए LogCat का उपयोग करें। यदि आप स्टैक ट्रेस को नहीं समझते हैं, तो इसे यहां पेस्ट करें। इसके अलावा, क्या है DSLLऔर क्या है Grade?
कॉमन्सवेयर

DSLL (DoubleSreadLinckedList) और मेरे द्वारा बनाई गई एक और कक्षा, ये दोनों भी धारावाहिक हैं।
user2896762

मैंने LogCar स्टैक ट्रेस
user2896762

4
सीधे तौर पर संबंधित नहीं, लेकिन ... मेरे मामले में मैं एक गैर-धारावाहिक बाहरी वर्ग के अंदर परिभाषित एक आंतरिक वर्ग को क्रमबद्ध करने का प्रयास कर रहा था। मैंने सीखा कि गैर-स्थिर आंतरिक कक्षाओं में उनके बाहरी वर्ग ( यह प्रश्न देखें ) का संदर्भ होता है
जिराफ.गुरु

जवाबों:


324
Caused by: java.io.NotSerializableException: com.resources.student_list.DSLL$DNode

आपकी DSLLकक्षा एक DNodeस्थिर आंतरिक वर्ग प्रतीत होती है , और DNodeनहीं है Serializable


60
@ user2896762: सामान्य तौर पर, एंड्रॉइड पर, स्टैक ट्रेस के नीचे से शुरू करें और अंतिम Caused byपंक्ति तक अपना रास्ता बनाएं । यह आमतौर पर विशिष्ट समस्या की ओर इशारा करता है। स्टैक ट्रेस के अन्य सभी चरण ट्रेस के निचले भाग में "वास्तविक" अपवाद के चारों ओर लिपटे अपवादों का प्रतिनिधित्व करते हैं।
कॉमन्सवेअर

3
मैं सिर्फ कारण के बारे में पढ़ा था, यह लगभग 3 साल के विकास के लिए पता था।
स्टर्लिंग डियाज़

1
धन्यवाद!!! @ user2896762 & @CommonsWare मैंने स्टैक ट्रेस पढ़ा ... मेरी कक्षा में एक वस्तु नहीं मिली थी। और अब यह काम कर रहा है। Caused by: java.io.NotSerializableException:
वीजे विशाल जोगिया

@CommonsWare उपरोक्त कोड का उपयोग कैसे करें। क्या आप मेरी मदद कर सकते हैं pls?
जिक्स

4
मॉडल में प्रत्येक और प्रत्येक आंतरिक वर्ग को क्रमबद्ध होना चाहिए।
समीर मांगरोलिया

55

आपके OneThread Class को Serializable भी लागू करनी चाहिए। सभी उप-वर्गों और आंतरिक उप-वर्गों को क्रमिक रूप से लागू करना चाहिए ।

यह मेरे लिए काम किया है ...


24

यदि आप डीएनोड को धारावाहिक नहीं बना सकते हैं तो चर में "क्षणिक" जोड़ना एक अच्छा समाधान होगा।

उदाहरण:

public static transient DNode dNode = null;

यह Intent.putExtra (...) का उपयोग करते समय चर को अनदेखा करेगा।


2
transientजावा में कीवर्ड दर्शाता है कि एक क्षेत्र धारावाहिक नहीं किया जाना चाहिए किया जाता है। यहां पूर्ण उत्तर दें: stackoverflow.com/a/910522/1306012
ब्रूनो बीरी

8

यदि आप पीओजेओ के अंदर कोई अन्य मॉडल रखते हैं, तो यह भी सीरियल को लागू करना चाहिए


5

मेरे लिए यह वर्ग क्षणिक के साथ परिवर्तनशील बनाकर हल किया गया था।

पहले कोड:

public class UserLocation implements Serializable {
   public Location lastKnownLocation;
   public UserLocation() {}
}

के बाद कोड

public class UserLocation implements Serializable {
    public transient Location lastKnownLocation;
    public UserLocation() {}
}   

यह मेरे लिए काम नहीं कर सकता। मैं इसे क्षणिक नहीं बना सकता क्योंकि मुझे वास्तव में अपने कोडबेस में उस चर के मूल्य की आवश्यकता है।
तस्लीम ओसेनी

इससे मुझे मदद मिली। धन्यवाद
सांप

2

समस्या तब होती है जब आपके कस्टम वर्ग के पास कुछ अन्य वर्ग की संपत्ति होती है जैसे "बिटमैप"। मैंने जो किया है वह संपत्ति क्षेत्र को "निजी बिटमैप फोटो" से "निजी क्षणिक बिटमैप फोटो" में बदलना है। हालाँकि, रिसीवर गतिविधि में मैं getIntent () के बाद छवि खाली है। इसके कारण मैंने कस्टम वर्ग को इरादे से पास कर दिया है और यह भी कि मैंने छवि से एक बाइट सरणी बनाई है और इसे इरादे से अलग कर दिया है:

चयनित यह मेरा कस्टम ऑब्जेक्ट है और getPlacePhoto छवि प्राप्त करने के लिए उसका तरीका है। मैंने पहले ही इसे पहले ही सेट कर लिया है और अब मैं इसे कन्वर्ट करने की तुलना में सबसे पहले प्राप्त करता हूं और इसे अलग से पास करता हूं:

 Bitmap image = selectedItem.getPlacePhoto();
 image.compress(Bitmap.CompressFormat.PNG, 100, stream);
 byte[] byteArray = stream.toByteArray();
 Intent intent = new Intent(YourPresentActivity.this, 
 TheReceiverActivity.class);
 intent.putExtra("selectedItem", selectedItem);                 
 intent.putExtra("image", byteArray);
 startActivity(intent);            

`

फिर रिसीवर गतिविधि में मुझे मेरी वस्तु और बाइट सरणी के रूप में छवि मिलती है, छवि को डीकोड करें और इसे फोटो ऑब्जेक्ट के रूप में मेरी वस्तु पर सेट करें।

 Intent intent = getIntent();
 selectedItem = (ListItem) intent.getSerializableExtra("selectedItem");
 byte[] byteArray = getIntent().getByteArrayExtra("image");
 Bitmap image = BitmapFactory.decodeByteArray(byteArray, 0, 
 byteArray.length);
 selectedItem.setPhoto(image);

2

अपवाद इस तथ्य के कारण हुआ कि किसी भी आंतरिक वर्ग या अन्य संदर्भित वर्गों ने क्रमिक कार्यान्वयन को लागू नहीं किया। इसलिए सुनिश्चित करें कि सभी संदर्भित वर्गों को क्रमिक कार्यान्वयन लागू करना होगा।


0

मैं भी इन त्रुटि को चरणबद्ध कर रहा हूं और मैं मॉडलक्लास में थोड़ा सा परिवर्तन कर रहा हूं जो कि लागू किया जा सकता है जैसे कि धारावाहिक इंटरफ़ेस :

कि मॉडल वर्ग भी लागू पर Parcelable इंटरफेस के साथ writeToParcel () ओवरराइड विधि

फिर बस "निर्माता बनाने" में त्रुटि हुई, इसलिए निर्माता लिख रहा है और तर्क और तर्क के साथ मॉडलक्लास अवरोधक भी बना सकता है ..

       @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(id);
            dest.writeString(name);
        }

        protected ArtistTrackClass(Parcel in) {
            id = in.readString();
            name = in.readString();
        }

       public ArtistTrackClass() {

        }

    public static final Creator<ArtistTrackClass> CREATOR = new Creator<ArtistTrackClass>() {
        @Override
        public ArtistTrackClass createFromParcel(Parcel in) {
            return new ArtistTrackClass(in);
        }

        @Override
        public ArtistTrackClass[] newArray(int size) {
            return new ArtistTrackClass[size];
        }
    };

यहाँ,

कलाकारट्रैकक्लास -> मॉडलक्लास

पार्सल तर्कों के साथ कंस्ट्रक्टर "हमारी विशेषताओं को पढ़ें" और writeToParcel () "हमारी विशेषताओं को लिखें"


0

ग्रेड वर्ग को भी धारावाहिक लागू करना चाहिए

public class Grade implements Serializable {
.....your content....
}

0

सेम श्रेणी में सभी एम्पलीफायरों को सीरियल वाइज में बदलने की आवश्यकता है:

public static class PremiumListBean  implements Serializable {
    private List<AddOnValueBean> AddOnValue;

    public List<AddOnValueBean> getAddOnValue() {
        return AddOnValue;
     }

    public void setAddOnValue(List<AddOnValueBean> AddOnValue) {
        this.AddOnValue = AddOnValue;
    }


    public static class AddOnValueBean  implements Serializable{

        @SerializedName("Premium")
        private String Premium;

        public String getPremium() {
            return Premium;
        }

        public void setPremium(String Premium) {
            this.Premium = Premium;
        }
    }
 }

0

मुझे एक ही समस्या का सामना करना पड़ा, कुछ स्थिर कक्षाओं के साथ कुछ आंतरिक कक्षाएँ थीं। स्थैतिक कीवर्ड को हटाने के बाद यह काम करना शुरू कर दिया और साथ ही आंतरिक वर्ग को सीरियल योग्य बनाना चाहिए

मुद्दा परिदृश्य

class A implements Serializable{ 
  class static B{
  } 
}

द्वारा हल किया गया

class A implements Serializable{ 
      class B implements Serializable{
      } 
    }

0

मेरे मामले में मैं लागू करने के लिए किया था MainActivityके रूप में Serializableभी। क्योंकि मुझे अपनी सेवा शुरू करने की आवश्यकता थी MainActivity:

public class MainActivity extends AppCompatActivity implements Serializable {
    ...
    musicCover = new MusicCover(); // A Serializable Object
    ...
    sIntent = new Intent(MainActivity.this, MusicPlayerService.class);
    sIntent.setAction(MusicPlayerService.ACTION_INITIALIZE_COVER);
    sIntent.putExtra(MusicPlayerService.EXTRA_COVER, musicCover);
    startService(sIntent);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.