android - किसी उद्देश्य में कस्टम ऑब्जेक्ट पास नहीं कर सकता: अतिरिक्त विधि टाइप करें उद्देश्य इरादे के लिए अस्पष्ट है




android-intent parcelable (4)

अगर मैं लिखने की कोशिश करता हूं

Car myCarObject=getCar();
Intent details = new Intent(Start.this, DetailsCar.class);
                details.putExtra("Car", myCarObject);
                startActivity(details);

ग्रहण मुझे एक संकलन त्रुटि दिखाता है " लाइन में अतिरिक्त विधि उद्देश्य उद्देश्य के लिए अस्पष्ट है"

  details.putExtra("Car", myCarObject);

अगर मैं कोड का उपयोग करता हूं

Car myCarObject=getCar();
ArrayList<Car> parcelableExtra = new ArrayList<Car>();
                parcelableExtra.add(myCarObject);

Intent details = new Intent(Start.this, DetailsCar.class);
                details.putExtra("Car", parcelableExtra);
                startActivity(dettagli);

और मैं गंतव्य कोड में इस कोड के साथ अतिरिक्त लोड करने का प्रयास करता हूं

ArrayList<Car> parcelableExtra = new ArrayList<Car>();
        parcelableExtra = (ArrayList<Car>) getIntent().getExtras().getParcelable("Car");
        Car c=parcelableExtra.get(0);

मुझे यह चेतावनी मिलती है

12-14 05:30:07.669: W/Bundle(19823): Key Car expected Parcelable but value was a java.util.ArrayList.  The default value <null> was returned.
12-14 05:30:07.679: W/Bundle(19823): Attempt to cast generated internal exception:
12-14 05:30:07.679: W/Bundle(19823): java.lang.ClassCastException: java.util.ArrayList
12-14 05:30:07.679: W/Bundle(19823):    at android.os.Bundle.getParcelable(Bundle.java:1106)
12-14 05:30:07.679: W/Bundle(19823):    at my.app.com.DetailsCar.onCreate(DetailsCar.java:43)
12-14 05:30:07.679: W/Bundle(19823):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-14 05:30:07.679: W/Bundle(19823):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
12-14 05:30:07.679: W/Bundle(19823):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
12-14 05:30:07.679: W/Bundle(19823):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-14 05:30:07.679: W/Bundle(19823):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
12-14 05:30:07.679: W/Bundle(19823):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-14 05:30:07.679: W/Bundle(19823):    at android.os.Looper.loop(Looper.java:130)
12-14 05:30:07.679: W/Bundle(19823):    at android.app.ActivityThread.main(ActivityThread.java:3687)
12-14 05:30:07.679: W/Bundle(19823):    at java.lang.reflect.Method.invokeNative(Native Method)
12-14 05:30:07.679: W/Bundle(19823):    at java.lang.reflect.Method.invoke(Method.java:507)
12-14 05:30:07.679: W/Bundle(19823):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
12-14 05:30:07.679: W/Bundle(19823):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
12-14 05:30:07.679: W/Bundle(19823):    at dalvik.system.NativeStart.main(Native Method)
12-14 05:30:07.679: W/dalvikvm(19823): threadid=1: thread exiting with uncaught exception (group=0x40018578)

और ऐप एक नल प्वाइंट अपवाद के साथ दुर्घटनाग्रस्त हो जाता है

मेरी कार वस्तु पार्सलबल है

तो .... क्या गलत है?


इस प्रकार मैं अपनी ऑब्जेक्ट्स को पास करता हूं जो क्रमिक हैं, मुझे विश्वास है कि इसे पार्ससेल के लिए उसी तरह काम करना चाहिए। उत्तीर्ण करना:

Intent intent=new Intent(OverviewActivity.this,CarDetailTabActivity.class);         
            intent.putExtra("CAR",myCarObject);
            startActivity(intent);  

प्राप्त करना:

Car carObject=(Car)getIntent().getSerializableExtra("CAR");

गाड़ी:

import java.io.Serializable;

public class Car implements Serializable {

private static final long serialVersionUID = 1L;
......

मैं इसका इस्तेमाल करता हूँ

प्रेषक Activiy में

Intent intent = new Intent(activity, MyActivity.class);

Bundle bundle = new Bundle();
bundle.putSerializable("my object", myObject);

intent.putExtras(bundle);

startActivity(intent);

रिसीवर में:

myObject = (MyObject) getIntent().getExtras().getSerializable("my object");

मेरे लिए ठीक काम करता है इसे आजमाएं। लेकिन वस्तु serializable होना चाहिए :)


पहली त्रुटि: 'विधि रखो अतिरिक्त प्रकार के इरादे के लिए अस्पष्ट है'।

क्लास Car दोनों Parcelable और Parcelable , संकलक को पता नहीं है कि आपके अनुरोध को संभालने के लिए putExtra(Serializable s) या putExtra(Parcelable p) का उपयोग putExtra(Serializable s) या नहीं। तो Intent.putExtra() का उपयोग करते समय आपको अपनी Car को उनमें से एक को डालना होगा।

Intent.putExtra("car", (Parcelable)myCarObject);
Intent.putExtra("car", (Serializable)myCarObject);

दूसरी त्रुटि: java.lang.ClassCastException: java.util.ArrayList

आपने Car ऑब्जेक्ट को putExtra में रखा है और अगली गतिविधि को भेजने के लिए putExtra का उपयोग करें। एक ArrayList Parcelable नहीं है, लेकिन केवल SerializableputExtra(ArrayList) putExtra(Serializable) रूप में काम करता है, लेकिन आप इसे getParcelable() द्वारा getParcelable() । एक ArrayList Parcelable को नहीं डाला जा सकता है।


समाधान : Serializable लागू करने के रूप में अपनी कक्षा द्वारा Serializable इंटरफ़ेस implements Serializable