2015-04-18, 12:59
  #1
Medlem
Hej,

Har problem med att spara en LinkedList till fil. Har lyckats spara och ladda objektet som sparas i den lnkade filen, men nr jag istllet frsker spara ner hela LinkedList lyckas jag inte lsa ut den korrekt. Efter utlsningen fungerar inte listan som en lista lngre. Metoderna fungerar liksom inte. Antagligen r den inte en LinkedList efter utlsningen. Ngot mste g fel!

Kod:
public void saveData()
    {

        if(LinkedList_taskItems.isEmpty()) {
            File f = new File(this.getFilesDir()+"/datafil1.dat");
            f.delete();
            return;
        }
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(this.openFileOutput("datafil1.dat", MODE_PRIVATE));


            objectOutputStream.writeObject(LinkedList_taskItems);

            objectOutputStream.close();

        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Kod:
public void loadData()
    {
        File f = new File(this.getFilesDir()+"/datafil1.dat");

        if(!f.exists())
            return;
        try {
            ObjectInputStream objectinputstream = new ObjectInputStream(this.openFileInput("datafil1.dat"));

            LinkedList_taskItems = ((LinkedList<TaskItem>) objectinputstream.readObject());
            objectinputstream.close();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (OptionalDataException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (StreamCorruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally{
            return;
        }
    }
Citera
2015-04-18, 14:31
  #2
Medlem
bithaxs avatar
Vad gr din "this.openFileOutput()" metod?

Gissar p att ngonting gr fel fr att du inte skriver ver filen emellan krningarna.
Sedan lser du ut det frsta objektet som r gammalt och tomt.

Prva att ta bort filen och se vad som hnder.
__________________
Senast redigerad av bithax 2015-04-18 kl. 14:44.
Citera
2015-04-19, 18:42
  #3
Medlem
Hej,

Det r en metod som hr till Context.

Det har inte med att filen redan existerar att gra. Tagit bort och testat. Det verkar som om att listan inte spras ner som den ska, eller lses in som den ska.
Citera
2015-04-19, 20:39
  #4
Medlem
Jag ser inget direkt fel p koden. Gjorde ett testcase som fungerar med fljande kod (java 7).

Kod:
public class LinkedListSerializationTest {
	
	@Rule
	public TemporaryFolder folder = new TemporaryFolder();
	
	@SuppressWarnings("unchecked")
	@Test
	public void bla() throws FileNotFoundException, IOException, ClassNotFoundException {
		
		LinkedList<SomeStruct> list = new LinkedList<SomeStruct>();
		list.add(new SomeStruct(1, "1"));
		list.add(new SomeStruct(2, "2"));
		
		File destination = folder.newFile();
		try(ObjectOutputStream oos = 
				new ObjectOutputStream(new FileOutputStream(destination))) {
			oos.writeObject(list);
		}
		
		Object readObject;
		try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream(destination))) {
			readObject = ois.readObject();
		}
		
		Assert.assertTrue(LinkedList.class.isAssignableFrom(readObject.getClass()));
		
		LinkedList<SomeStruct> deserializedList = (LinkedList<SomeStruct>) readObject;
		
		Assert.assertEquals(2, deserializedList.size());
		Assert.assertEquals(1, deserializedList.get(0).getAnInt());
		Assert.assertEquals(2, deserializedList.get(1).getAnInt());
		
	}

}

SomeStruct klassen:

Kod:
public class SomeStruct implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private int anInt;
	
	private String aString;
	
	public SomeStruct(int anInt, String aString){
		this.anInt = anInt;
		this.aString = aString;
	}

	public int getAnInt() {
		return anInt;
	}

	public String getaString() {
		return aString;
	}
	
}

Jmfr och se om du har missat ngot. Du behver junit 4 p classpathen fr att kra testet.
Citera
2015-05-04, 00:49
  #5
Medlem
Der_Richters avatar
r TaskItem som du har i din collection Serializeable?
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in