পার্সেলেবল আইওএক্সেপশন লেখার সিরিয়ালেজযোগ্য অবজেক্ট গ্যাটাকটিভিটির মুখোমুখি ()


171

সুতরাং আমি লগকাট এ পাচ্ছি:

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());
    }

}

এবং এটিই কোড যা getInttent () পদ্ধতি ব্যবহার করছে:

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);

                        } 

                    });

দয়া করে আমাকে এটির মধ্যে কী ভুল তা খুঁজে পেতে সহায়তা করুন।

এখানে পুরো লগগ্যাট:

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)

আপনার ব্যতিক্রমের সাথে যুক্ত পুরো জাভা স্ট্যাক ট্রেস পরীক্ষা করতে লগগ্যাট ব্যবহার করুন। আপনি যদি স্ট্যাক ট্রেস বুঝতে না পারেন তবে এটি এখানে পেস্ট করুন। এছাড়াও, কি DSLLএবং কি Grade?
কমন্সওয়্যার

ডিএসএলএল (ডাবলসোর্টডলিঙ্কডলিস্ট) এবং গ্রেড আমার তৈরি আরেকটি ক্লাস, দুটোই সিরিয়ালযোগ্য able
ব্যবহারকারী 2896762

আমি লগকার স্ট্যাক ট্রেস পোস্ট করেছি
ব্যবহারকারীর 2896762

4
সরাসরি সম্পর্কিত নয়, তবে ... আমার ক্ষেত্রে আমি একটি সিরিয়ালবিহীন বহিরাগত শ্রেণীর ভিতরে সংজ্ঞায়িত একটি অভ্যন্তর শ্রেণিকে সিরিয়াল করার চেষ্টা করছিলাম। আমি শিখেছি যে অ স্থিতিশীল অভ্যন্তর শ্রেণিতে তাদের বহিরাগত শ্রেণির একটি রেফারেন্স থাকে ( এই প্রশ্নটি দেখুন )।
জিরাফ.guru

উত্তর:


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

আপনার DSLLক্লাসে DNodeস্থির অভ্যন্তর শ্রেণি রয়েছে বলে মনে হয় এবং DNodeতা হয় না Serializable


60
@ ব্যবহারকারী ২৮৯676262: সাধারণভাবে, অ্যান্ড্রয়েডে, স্ট্যাক ট্রেসের নীচে থেকে শুরু করুন এবং শেষ Caused byলাইনে পৌঁছানোর পথে কাজ করুন । এটি সাধারণত নির্দিষ্ট সমস্যার দিকে ইঙ্গিত করতে চলেছে। স্ট্যাক ট্রেসের অন্যান্য সমস্ত স্তবগুলি ট্রেসের নীচে "রিয়েল" ব্যতিক্রমের চারপাশে মোড়ানো ব্যতিক্রমগুলি উপস্থাপন করে।
কমন্সওয়্যার

3
আমি সবে মাত্র পড়েছি, প্রায় 3 বছর বিকাশের জন্য এটি জানতাম না।
স্টার্লিং ডিয়াজ

1
ধন্যবাদ !!! @ ব্যবহারকারী 2896762 এবং @ কমন্সওয়্যার আমি স্ট্যাক ট্রেসটি পড়েছি ... পাওয়া গেছে আমার ক্লাসের একটি অবজেক্ট সিরিয়ালযুক্ত ছিল না। এবং এখন এটি কাজ করছে। Caused by: java.io.NotSerializableException:
ভিজে বিশাল জোগিয়া

@ কমন্সওয়্যার উপরের কোডটি কীভাবে ব্যবহার করবেন। আপনি আমাকে প্লিজ সাহায্য করতে পারেন?
জিক্স

4
মডেলের প্রতিটি এবং প্রতিটি অভ্যন্তর শ্রেণি অবশ্যই সিরিয়াল করা উচিত।
সমীর মঙ্গরোলিয়া

55

আপনার ওয়ানথ্রেড ক্লাসেরও সিরিয়ালাইজেবল কার্যকর করা উচিত। সমস্ত সাব ক্লাস এবং অভ্যন্তরীণ সাব ক্লাস অবশ্যই সিরিয়ালাইজবল প্রয়োগ করে

এটি আমার জন্য কাজ করা হয় ...


24

আপনি যদি ডিএনড সিরিয়ালযোগ্য না করতে পারেন তবে ভেরিয়েবলটিতে "ক্ষণস্থায়ী" যুক্ত করা একটি ভাল সমাধান।

উদাহরণ:

public static transient DNode dNode = null;

ইন্টেন্ট.পুটেক্সট্রা (...) ব্যবহার করার সময় এটি চলকটিকে উপেক্ষা করবে।


2
transientজাভা শব্দ নির্দেশ করে একটি ক্ষেত্র ধারাবাহিকভাবে করা উচিত নয় ব্যবহার করা হয়। এখানে সম্পূর্ণ উত্তর: stackoverflow.com/a/910522/1306012
ব্রুনো বিয়েরি

8

আপনি যদি POJO এর ভিতরে অন্য কোনও মডেল ধারণ করেন যা এটি সিরিয়ালাইজেবলকে প্রয়োগ করে


5

আমার জন্য এটি শ্রেণীর ক্ষণস্থায়ী সাথে পরিবর্তনশীল তৈরি করে সমাধান করা হয়েছিল।

কোড আগে:

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

কোড পরে

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

এটি আমার পক্ষে কাজ করতে পারে না। আমি এটিকে ক্ষণস্থায়ী করতে পারি না কারণ আমার কোডবেজে অন্য কোনও জায়গায় আমার এই ভেরিয়েবলের মান প্রয়োজন।
তাসলিম ওসেনি

এটি আমাকে সাহায্য করেছিল। ধন্যবাদ
ভাইপার

2

সমস্যাটি তখন ঘটে যখন আপনার কাস্টম শ্রেণিতে অন্য কোনও শ্রেণীর সম্পত্তি যেমন "বিটম্যাপ" থাকে। আমি যা করেছি তা হ'ল "ব্যক্তিগত বিটম্যাপ ফটো" থেকে "ব্যক্তিগত বেসরকারী বিটম্যাপ ফটো" তে সম্পত্তি ক্ষেত্রটি পরিবর্তন করা। তবে রিসিভার ক্রিয়াকলাপে আমি ইন্টেন্ট () পাওয়ার পরে চিত্রটি খালি। এ কারণে আমি কাস্টম ক্লাসটি অভিপ্রায় পাস করেছি এবং আমি ইমেজ থেকে একটি বাইট অ্যারে তৈরি করেছি এবং এটি পৃথকভাবে উদ্দেশ্যতে পাস করেছি:

সিলেক্টড আইটেমটি আমার কাস্টম অবজেক্ট এবং গেটপ্লেসফোটো ছবি পাওয়ার জন্য তার পদ্ধতি method আমি এটি ইতিমধ্যে সেট করেছি এবং এখন আমি এটি রূপান্তর করার চেয়ে আলাদা করে আলাদাভাবে পাস করার চেয়ে আগে পেয়েছি:

 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

আমি এই ত্রুটিটিও পর্যায়ক্রমে করছি এবং মডেলক্লাসে সামান্য পরিবর্তন আছি যা সিরিয়ালাইজযোগ্য ইন্টারফেস বাস্তবায়িত হয় যেমন:

সেই মডেল ক্লাসে রাইটটো পার্সেল () দিয়ে পার্সেবল ইন্টারফেসও প্রয়োগ করে ওভাররাইড পদ্ধতি

তারপরে কেবল "স্রষ্টা তৈরি করতে " ত্রুটি পেয়েছে তাই CREATOR লেখার পাশাপাশি আর্গুমেন্ট এবং বিনা যুক্তি ছাড়াই মডেলক্লাসের কনট্রাক্টর দিয়ে তৈরি করুন ..

       @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];
        }
    };

এখানে,

শিল্পী ট্র্যাকক্লাস -> মডেলক্লাস

পার্সেল আর্গুমেন্ট সহ কনস্ট্রাক্টর "আমাদের অ্যাট্রিবিউটগুলি পড়ুন" এবং লিখনটোপার্সেল () "আমাদের বৈশিষ্ট্যগুলি লিখুন"


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

আমি একই ইস্যুটির মুখোমুখি হয়েছি, সমস্যাগুলি ছিল স্ট্যাটিক কীওয়ার্ডের সাথে কিছু অভ্যন্তরীণ শ্রেণি রয়েছে the স্ট্যাটিক কীওয়ার্ড অপসারণের পরে এটি কাজ শুরু করে এবং অভ্যন্তরীণ শ্রেণীরও সিরিয়ালাইজেবলের প্রয়োগ করা উচিত

ইস্যু দর্শন

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);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.