android - पार्सलेबल ऑब्जेक्ट जो पारित डेटा प्राप्त करता है



android-intent nullpointerexception (1)

ठीक है, इसलिए जब आप यह कर रहे हैं:

Intent updateIntent = new Intent(MainActivity.this, ContactsActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("contact", item);
updateIntent.putExtra(ContactsActivity.RECIVED_CONTACT, bundle);
startActivityForResult(updateIntent,1);
adapter.notifyDataSetChanged();

आप एक डेटा संरचना के साथ समाप्त होता है जैसे:

Intent {
    Bundle extras {
        Bundle bundle {
            Contact contact;
        }
    }
}

और जब आप इसे पुनः प्राप्त करेंगे:

Parcelable receivedContact = getIntent().getParcelableExtra("contact"); 

आप गहरा पर्याप्त नहीं देख रहे हैं आप "संपर्क" नामक फ़ील्ड के लिए Intent.getExtras() बंडल में देख रहे हैं, लेकिन वास्तव में आपको पहले उस बंडल को पुनः प्राप्त करने की आवश्यकता है जिसे आपने इसे डाल दिया था:

Bundle bundle = getIntent().getBundleExtra(ContactsActivity.RECEIVED_CONTACT);
Contact contact = bundle.getParcelableExtra("contact");

वैकल्पिक रूप से, संपर्क सीधे इन्टेंट के अतिरिक्त में डाल दें:

Intent updateIntent = new Intent(MainActivity.this, ContactsActivity.class);
updateIntent.putExtra(ContactsActivity.RECEIVED_CONTACT, item);

और इसके साथ पुनर्प्राप्त करें:

Contact contact = getIntent().getParcelableExtra(ContactsActivity.RECEIVED_CONTACT);

मैं एक एंड्रॉइड ऐप पर काम कर रहा हूं जो संपर्क जानकारी को स्टोर करता है, मैं एक सुविधा जोड़ने की कोशिश कर रहा हूं, जब आप लिस्ट्यूव्यू में किसी संपर्क आइटम पर क्लिक करते हैं, तो वह संपर्क ऑब्जेक्ट भेज देगा जो दूसरी गतिविधि पर पार्सलेट योग्य करता है।

यह वह जगह है जहां मैं संपर्क गतिविधि पर संपर्क ऑब्जेक्ट भेजता हूं। `

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    final Contact item = (Contact) getListAdapter().getItem(position);

    Intent updateIntent = new Intent(MainActivity.this, ContactsActivity.class);
    Bundle bundle = new Bundle();
    bundle.putParcelable("contact", item);
    updateIntent.putExtra(ContactsActivity.RECIVED_CONTACT, bundle);
    startActivityForResult(updateIntent,1);
    adapter.notifyDataSetChanged();
}`

यह संपर्क गतिविधि कक्षा के क्रिएट में है, यह देखने के लिए जांच करेगा कि क्या कोई डेटा RECIVED_CONTACT टैग का उपयोग कर पास किया गया था। जिस पंक्ति में मेरे पास एक प्रकार का पार्सलेट योग्य है, जहां मेरे पास त्रुटियां हैं, मुझे एक अशक्त संकेतक अपवाद मिल रहा है।

if (getIntent().getParcelableExtra(ContactsActivity.RECIVED_CONTACT) != null) {

    //This line is where the exception ouccurs
    Parcelable receivedContact = getIntent().getParcelableExtra("contact"); 
    updateContact(receivedContact);
}

मेरा संपर्क ऑब्जेक्ट इस तरह दिखता है

public class Contact implements Parcelable {

String firstName;
String lastName;
String email;
String phone;

/**
 * Constructor
 */
public Contact(String firstName, String lastName, String email, String phone) {
    // TODO Auto-generated constructor stub
    this();
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;
    this.phone = phone;
}

public Contact(Parcel parcel) {
    this.firstName = parcel.readString();
    this.lastName = parcel.readString();
    this.email = parcel.readString();
    this.phone = parcel.readString();
}

 // this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
    public static final Parcelable.Creator<Contact> CREATOR = new Parcelable.Creator<Contact>() {
        public Contact createFromParcel(Parcel in) {
            //return new Contact(in);
            Contact mContact = new Contact();
            mContact.firstName = in.readString();
            mContact.lastName = in.readString();
            mContact.email = in.readString();
            mContact.phone = in.readString();
            return mContact;
        }

        public Contact[] newArray(int size) {
            return new Contact[size];
        }

    };

    public Contact() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @return the firstName
     */
    public String getFirstName() {
        return firstName;
    }

    /**
     * @return the lastName
     */
    public String getLastName() {
        return lastName;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @return the phone
     */
    public String getPhone() {
        return phone;
    }

    public String toString() {
        return firstName + " \n" + lastName + " \n"
                + email + " \n" + phone + " \n\n";
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    // write your object's data to the passed-in Parcel
    public void writeToParcel(Parcel out, int flags) {
        out.writeString(firstName);
        out.writeString(lastName);
        out.writeString(email);
        out.writeString(phone);
    }

}

मैं यह तय करने में सक्षम नहीं हूं कि यह कैसे ठीक करें ताकि आप अपना अधिक कोड देखना चाहें, तो बस पूछो और मैं इसे पोस्ट कर दूंगा। मुझे पार्सलेट योग्य ऑब्जेक्ट्स के बारे में अधिक जानकारी नहीं है और मुझे लगता है कि मैंने ऐसा करने के लिए कूड़ेदान किए हैं।

हालांकि, जब मैं पहले और अंतिम नाम, ईमेल और फोन को जोड़ने के लिए कुछ संपादकीय क्षेत्रों के साथ दूसरे संपर्क गतिविधि को शुरू करने में सक्षम MainActivity में एक ऐड बटन पर क्लिक कर रहा था तब मैं एक संपर्क वस्तु में इन चार तारों को डाल दिया और इसे वापस भेज दिया। प्रदर्शित होने वाली मुख्य गतिविधि मैंने उस कोड में से किसी को यहां नहीं पोस्ट किया है क्योंकि वह कोड काम कर रहा है। मैं सूची आउट में पहले से ही एक संपर्क ऑब्जेक्ट को अपडेट करने का तरीका समझ नहीं पा रहा हूं।

मैं सूची वस्तु से संपर्क ऑब्जेक्ट को चुनने में सक्षम होना चाहता हूं जो इसे ContactActivity पर भेजता है और संपादन टेस्ट फ़ील्ड्स में डेटा के चार स्ट्रिंग्स को डाल देता है।





parcelable