2010-12-09 14 views
14

मैंने कस्टम ऑब्जेक्ट्स से बना एक सरणीसूची बनाई है। असल में उपयोगकर्ता एक कक्षा बनाएगा और प्रत्येक बार कक्षा बनाई जाएगी, एक नया व्याख्यान (मेरी कस्टम ऑब्जेक्ट) सरणी सूची में जोड़ा जाता है। मुझे जेनरेट की गई सरणीसूची को सहेजने की ज़रूरत है ताकि ऐप रीस्टार्ट होने पर भी उपयोगकर्ता की कक्षाएं सहेजी जाएंगी।मैं कस्टम ऑब्जेक्ट्स की सरणीसूची कैसे संग्रहीत कर सकता हूं?

मेरी समझ से, मुझे अपनी कक्षा को क्रमबद्ध बनाना है। लेकिन मैं यह कैसे करूँ? और फिर एक बार इसके क्रमबद्ध करने के बाद मैं क्या करूँ?

public class Lecture{ 

public String title; 
public String startTime; 
public String endTime; 
public String day; 
public boolean classEnabled; 

public Lecture(String title, String startTime, String endTime, String day, boolean enable){ 
    this.title = title; 
    this.startTime = startTime; 
    this.endTime = endTime; 
    this.day = day; 
    this.classEnabled = enable; 
} 
//Getters and setters below 

उत्तर

11

आप भाग्यशाली हैं अपने वर्ग के सभी सदस्यों को पहले से ही serialzble हैं तो आपका पहला कदम कहना है कि व्याख्यान Serializable है।

public class Lecture implements Serializable { 

    public String title; 
    public String startTime; 
    public String endTime; 
    public String day; 
    public boolean classEnabled; 

    public Lecture(String title, String startTime, String endTime, String day, boolean enable){ 
     this.title = title; 
     this.startTime = startTime; 
     this.endTime = endTime; 
     this.day = day; 
     this.classEnabled = enable; 
    } 

अगला, आपको एक डिफ़ॉल्ट कन्स्ट्रक्टर बनाने की आवश्यकता है क्योंकि क्रमिकरण की आवश्यकता होती है। आखिरी बात यह है कि आपको अपनी ऑब्जेक्ट को फाइल में लिखना होगा। मैं आमतौर पर निम्नलिखित की तरह कुछ उपयोग करता हूं। ध्यान दें कि यह एक गेम स्टेटस सहेजने के लिए है ताकि आप कैश निर्देशिका का उपयोग नहीं करना चाहें।

private void saveState() { 
    final File cache_dir = this.getCacheDir(); 
    final File suspend_f = new File(cache_dir.getAbsoluteFile() + File.separator + SUSPEND_FILE); 

    FileOutputStream fos = null; 
    ObjectOutputStream oos = null; 
    boolean   keep = true; 

    try { 
     fos = new FileOutputStream(suspend_f); 
     oos = new ObjectOutputStream(fos); 

     oos.writeObject(this.gameState); 
    } 
    catch (Exception e) { 
     keep = false; 
     Log.e("MyAppName", "failed to suspend", e); 
    } 
    finally { 
     try { 
      if (oos != null) oos.close(); 
      if (fos != null) fos.close(); 
      if (keep == false) suspend_f.delete(); 
     } 
     catch (Exception e) { /* do nothing */ } 
    } 
} 

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

+0

समझाते हुए शून्य से, मैं googled है कि आपका जवाब मिल गया! – l0gg3r

13

मैं एक मौसम एप्लिकेशन मैं विकासशील हूँ में एक वर्ग का उपयोग करें ...

public class RegionList extends ArrayList<Region> {} // Region implements Serializeable 

बचाने के लिए मैं इस तरह कोड का उपयोग करें ...

FileOutputStream outStream = new FileOutputStream(Weather.WeatherDir + "/RegionList.dat"); 
ObjectOutputStream objectOutStream = new ObjectOutputStream(outStream); 
objectOutStream.writeInt(uk_weather_regions.size()); // Save size first 
for(Region r:uk_weather_regions) 
    objectOutStream.writeObject(r); 
objectOutStream.close(); 

नोट: इससे पहले कि मैं क्षेत्र लिखने वस्तुओं, मैं सूची के 'आकार' को बचाने के लिए एक int लिखते हैं।

जब मैं वापस मैं यह कर पढ़ें ...

FileInputStream inStream = new FileInputStream(f); 
ObjectInputStream objectInStream = new ObjectInputStream(inStream); 
int count = objectInStream.readInt(); // Get the number of regions 
RegionList rl = new RegionList(); 
for (int c=0; c < count; c++) 
    rl.add((Region) objectInStream.readObject()); 
objectInStream.close(); 
संबंधित मुद्दे