2013-02-28 6 views
19

मैंने कुछ विषयों की खोज की है लेकिन मेरी समस्या का समाधान नहीं मिला है।पास ArrayList <? पार्ससेलबल को लागू करता है> गतिविधि

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

}

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

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

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

इस यह करने के लिए सही तरीका है के लिए लागू नहीं है?

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

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

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

+0

1/मुझे समझ नहीं आता काम नहीं करता क्या था आपके कोड में 2/क्या आप कहीं सूचियों को सहेजते नहीं हैं? इसलिए, गतिविधि से गतिविधि तक पहुंचने वाली सरणी के बजाय डेटाबेस पर काम करना सबसे अच्छा नहीं होगा? – njzk2

+0

पार्ससेलबल्स शैतान हैं इसलिए बोलने के लिए ... क्या आपने इसे इसके बजाय Serializable बनाने की कोशिश की है? – snowCrabs

+1

मैं इस धारणा के तहत था कि सेरियलज़ेबल बहुत धीमी है क्योंकि पार्सेलिएबल जाने का तरीका है? –

उत्तर

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

    @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"); 
    } 
    } 
    
  • उपरोक्त कोड दो अलग-अलग गतिविधियों से क्रिएट() पर है। पहला व्यक्ति दूसरा लॉन्च करता है; और यह ठीक काम करता है मैं बिना किसी समस्या के पार्सल खींचने में सक्षम था।

+0

इसे बदल दिया। हालांकि NullPointerException बनी हुई है। ' –

+0

बंडल में उसका नाम नहीं वास्तव में कोई फर्क आप इसे कह सकते हैं करता है, नहीं है, हालांकि ' ArrayList सूची = savedInstanceState .getParcelableArrayList ("com.example.episodetracker.listofseries") इस हिस्से में कुछ भी बदल गया है कुंजी के रूप में "MyArray" और यह काम करना चाहिए। यह किस लाइन पर दुर्घटनाग्रस्त है? – snowCrabs

+0

लाइन पर क्रैशिंग जहां मैं अपनी नई गतिविधि में "लोड" करता हूं। विशेष रूप से यह पंक्ति: ऐरेलिस्ट सूची = सहेजे गए इंस्टेंसस्टेट .getParcelableArrayList ("com.example.episodetracker.listofseries"); ' –

2

आपको विधि Intent कक्षा पर विधि का उपयोग करना चाहिए।

+0

'intent.putParcelableArrayListExtra (\t \t" com.example.episodetracker.listofseries ", (ArrayList) listOfSeries <फैली Parcelable?>);' इस यह करने के लिए सही तरीका क्या है? यदि मैं इसे नहीं डालता, तो मुझे निम्न त्रुटि मिलती है: ** विधि डाला गया है पार्ससेलएर्रेस्टइस्ट्रा (स्ट्रिंग, ऐरेलिस्ट विस्तारित करता है) प्रकार में इरादा तर्कों के लिए लागू नहीं है (स्ट्रिंग, सूची ) ** –

+9

अपनी 'सूचीऑफरीज़री' को 'ऐरेलिस्ट' के रूप में 'सूची' के रूप में घोषित करें। –

+1

ठीक है, जिसने कंपाइलर को खुश कर दिया। हालांकि, डेटा को पढ़ने का प्रयास करने के बाद भी प्रोग्राम क्रैश हो जाता है। मैंने मूल पोस्ट को लॉगकट स्निपेट के साथ अपडेट किया है। –

3

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

0

हो सकता है कि यह किसी को मदद मिलती है .. किसी और मेरी समस्या यह है कि मैं लिखने और readValue इस्तेमाल किया, लेकिन यह writeInt, readInt writeString, readString तरह प्रकार से मेल खाना चाहिए और इसके आगे

संबंधित मुद्दे