Android Test - Läsa och skriva till fil

Permalänk
Medlem

Android Test - Läsa och skriva till fil

Hej. Jag sitter och försöker göra en klass som läser och skriver till Android via Internal Storage.
Felet är att det som skrivs till filen inte går att läsa. När den försöker läsa ut listan igen så ger readObjectsFromFile ett IOException.

Jag vet inte om man kan läsa filerna manuellt i android, kan man?

Metoden som ska läsa ser ut så här:

public List<T> readObjectsFromFile(String classTag) { List<T> objList = new ArrayList<T>(); try { // Open streams for writing ois = new ObjectInputStream(context.openFileInput(classTag + "Object")); objList = (List<T>) ois.readObject(); // Här ger ois.readObject() ett IOException // Close the streams ois.close(); } catch (FileNotFoundException e) { Log.e("FileStorage", "FileNotFoundException in FileStorage readObjectsToFile"); } catch (StreamCorruptedException e) { Log.e("FileStorage", "StreamCorruptedException in FileStorage readObjectsToFile"); } catch (ClassNotFoundException e) { Log.e("FileStorage", "ClassNotFoundException in FileStorage readObjectsToFile"); } catch (IOException e) { Log.e("FileStorage", "IOException in FileStorage readObjectsToFile"); } return objList; }

Metoden som skriver

public boolean writeObjectsToFile(String classTag, List<T> objList) { try { FileOutputStream fos = context.openFileOutput(classTag + "Object", Context.MODE_PRIVATE); // Open streams for writing ObjectOutputStream oos = new ObjectOutputStream(context.openFileOutput(classTag + "Object", Context.MODE_PRIVATE)); oos.writeObject(objList); // Close the ObjectInputStream oos.close(); } catch (FileNotFoundException e) { Log.e("FileStorage", FileNotFoundException in FileStorage writeObjectsToFile"); return false; } catch (IOException e) { Log.e("FileStorage", "IOException in FileStorage writeObjectsToFile"); return false; } return true; }

Test klass metoden som gör att det inte funkar

public void testReadObjectsFromFile() { //Init classListOne = new ArrayList<TestClassOne>(); classListTwo = new ArrayList<TestClassTwo>(); storageOne = new FileStorage<TestClassOne>(getContext()); storageTwo = new FileStorage<TestClassTwo>(getContext()); for (int i = 0; i < 100; i++) { TestClassOne testOne = new TestClassOne("StringOne" + Integer.toString(i), "StringTwo" + Integer.toString(i)); classListOne.add(testOne); // Clone list to set it into the other class List<TestClassOne> cloneList = new ArrayList<TestClassOne>(); for (TestClassOne c : classListOne) { cloneList.add(c); } classListTwo.add(new TestClassTwo(cloneList)); // Write to file storageOne.writeObjectsToFile(TestClassOne.TAG, classListOne); storageTwo.writeObjectsToFile(TestClassTwo.TAG, classListTwo); // Read from storageOne List<TestClassOne> readFromStorageOne = storageOne.readObjectsFromFile(TestClassOne.TAG); // Test all values are intact for (int n = 0; n < i; n++) { assertEquals(readFromStorageOne.get(n).testStringOne, classListOne.get(n).testStringOne); // <-- Här får vi ett IndexOutOfBounds assertEquals(readFromStorageOne.get(n).testStringTwo, classListOne.get(n).testStringTwo); } // Read from storageTwo List<TestClassTwo> readFromStorageTwo = storageTwo.readObjectsFromFile(TestClassTwo.TAG); // Test all values are intact for (int n = 0; n < i; n++) { assertEquals(readFromStorageTwo.get(n), classListTwo.get(n)); } } }

De två inre klasserna i testet

private class TestClassOne implements Serializable { public static final String TAG = "TestClassOne"; public String testStringOne; public String testStringTwo; public TestClassOne(String testStringOne, String testStringTwo) { this.testStringOne = testStringOne; this.testStringTwo = testStringTwo; } } private class TestClassTwo implements Serializable { public static final String TAG = "TestClassTwo"; public List<TestClassOne> list; public TestClassTwo(List<TestClassOne> list) { this.list = list; } } }

Visa signatur

CPU - QuadCore Intel Core 2 Quad 2,4 Q6600 | Ram - 4 096MB (DDR2-800 DDR2 SDRAM) | Moderkort - Asus P5E3 | Grafikkort - ATI Radeon HD 3870 X2 (1024 MB)

Permalänk

Om du inte har hittat till Swedroids utvecklingsforum tidigare så kanske de kan hjälpa dig: http://www.swedroid.se/forum/f4/

Permalänk
Medlem
Skrivet av VirtualIntent:

Om du inte har hittat till Swedroids utvecklingsforum tidigare så kanske de kan hjälpa dig: http://www.swedroid.se/forum/f4/

Nepp inte tittat där innan... ska göra det

Tack

Visa signatur

CPU - QuadCore Intel Core 2 Quad 2,4 Q6600 | Ram - 4 096MB (DDR2-800 DDR2 SDRAM) | Moderkort - Asus P5E3 | Grafikkort - ATI Radeon HD 3870 X2 (1024 MB)