android - ArrayList पास<? पार्सलबल> गतिविधि के लिए लागू करता है




parcelable (3)

मैंने कुछ विषयों की खोज की है लेकिन मेरी समस्या का समाधान नहीं मिला है।

public class Series implements Parcelable {
private String name;
private int numOfSeason;
private int numOfEpisode;

/** Constructors and Getters/Setters have been removed to make reading easier **/

public Series(Parcel in) {
    String[] data = new String[3];
    in.readStringArray(data);
    this.name = data[0];
    this.numOfSeason = Integer.parseInt(data[1]);
    this.numOfEpisode = Integer.parseInt(data[2]);
}


@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeStringArray(new String[] { this.name,
            String.valueOf(this.numOfSeason),
            String.valueOf(this.numOfEpisode) });

}

private void readFromParcel(Parcel in) {
    name = in.readString();
    numOfSeason = in.readInt();
    numOfEpisode = in.readInt();
}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    @Override
    public Series createFromParcel(Parcel in) {
        return new Series(in);
    }

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

}

मेरी मुख्य गतिविधि में मेरे पास एक ऐरेलिस्ट है। सूची को गतिशील रूप से संपादित करने योग्य बनाने के लिए मुझे इसे दूसरी गतिविधि में पास करने की आवश्यकता है जहां मैं इसे संपादित कर सकता हूं।

ArrayList<Series> listOfSeries = new ArrayList<Series>();

    public void openAddActivity() {
    Intent intent = new Intent(this, AddActivity.class);
    intent.putParcelableArrayListExtra(
            "com.example.episodetracker.listofseries",
            (ArrayList<? extends Parcelable>) listOfSeries);
    startActivity(intent);
}

मुझे सूची डालने की ज़रूरत है, अन्यथा ग्रहण मुझे निम्नलिखित त्रुटि संदेश देता है। इस प्रकार के तरीके में विधि इरादे (स्ट्रिंग, ऐरेलिस्ट) स्ट्रैटेबलएरेरे लिस्टएक्स्ट्रा (स्ट्रिंग, ऐरेलिस्ट) तर्कों के लिए लागू नहीं है (स्ट्रिंग, लिस्ट)

क्या यह करने का सही तरीका है?

    ArrayList<Series> list = savedInstanceState
            .getParcelableArrayList("com.example.episodetracker.listofseries");

इस तरह से मैं किसी अन्य गतिविधि में डेटा को पढ़ने का प्रयास करता हूं।

यह उपरोक्त रेखा पर दुर्घटनाग्रस्त हो रहा है। अर्थात् getParcelableArrayList भाग।



मैंने एक Bundle ऑब्जेक्ट से putParcelableArrayList(<? extends Parcelable>) किया है। सीधे एक उद्देश्य वस्तु से नहीं। (मुझे वास्तव में नहीं पता कि क्या अंतर है)। लेकिन मैं इस तरह उपयोग करने के लिए उपयोग करता हूं:

ArrayList<ParcelableRow> resultSet = new ArrayList<ParcelableRow>();
resultSet = loadData();

Bundle data = new Bundle();
data.putParcelableArrayList("search.resultSet", resultSet);
yourIntent.putExtra("result.content", data);
startActivity(yourIntent);

बाद में अपनी नई गतिविधि पर आप हाल ही में बंडल ऑब्जेक्ट पर डाले गए डेटा को पॉप्युलेट कर सकते हैं:

Bundle data = this.getIntent().getBundleExtra("result.content");
ArrayList<ParcelableRow> result = data.getParcelableArrayList("search.resultset");

बस याद रखें कि आपके ArrayList<> में केवल पार्ससेल योग्य वस्तुएं होनी चाहिए। और यह सुनिश्चित करने के लिए कि आपने डेटा पारित किया है, आप जांच सकते हैं कि प्राप्त आंकड़े शून्य से हैं या नहीं, केवल मुद्दों से बचने के लिए।


  • समस्या पार्सल को लिखने और पार्सल से पढ़ने में है ...

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(numOfSeason);
        dest.writeInt(numOfEpisode);
    }
    
    private void readFromParcel(Parcel in) {
        name = in.readString();
        numOfSeason = in.readInt();
        numOfEpisode = in.readInt();
    }
    
  • जो भी आप लिखते हैं उसे उस मैच से मेल खाना पड़ेगा जो आप पढ़ते हैं ...

    @Override
     protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    Intent i = new Intent(this,SecondActivity.class);
    
    ArrayList<testparcel> testing = new ArrayList<testparcel>();
    
    i.putParcelableArrayListExtra("extraextra", testing);
    startActivity(i);
    }
    
        /**********************************************/
    
    
    public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ArrayList<testparcel> testing = this.getIntent().getParcelableArrayListExtra("extraextra");
     }
    }
    
  • उपर्युक्त कोड दो अलग-अलग गतिविधियों से क्रिएट () पर है। पहला व्यक्ति दूसरा लॉन्च करता है; और यह ठीक काम करता है मैं बिना किसी समस्या के पार्सल खींचने में सक्षम था।





parcelable