// TODO Make the call to save and load s.t. it cannot enter both at the same time private synchronized void saveTamagotchiFromFile() { FileOutputStream fos = null; try { available.acquire(); this.deleteFile(fileName); // TODO How to make sure that we are done deleting the file? (in a better way) // TODO Make sure that only one thread is saving a time boolean found = true; while (found) { String[] fs = this.fileList(); boolean k = false; for (int i = 0; i < fs.length; i++) { if (fs[i].equals(fileName)) k = true; } found = k; } fos = this.openFileOutput(fileName, Context.MODE_PRIVATE); ObjectOutputStream os = new ObjectOutputStream(fos); os.writeObject(tama); os.flush(); os.close(); fos.close(); Log.d(TAMAGOTCHI, "Done saving tama"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } finally { available.release(); } }
// TODO Der kommer en EOF exception når der forsøges at readObject. // TODO Brug sharedpref til at gemme og læse tamagotchi. private synchronized void loadTamagotchiFromFile() { FileInputStream fis = null; try { available.acquire(); Log.d(TAMAGOTCHI, "Loading the tamagotchi from: " + fileName); fis = this.openFileInput(fileName); ObjectInputStream is = new ObjectInputStream(fis); // is.reset(); // TODO Bug when reading a tama from filesystem // Steps to reproduce: Kill with the app context menu thingie, start app again. tama = (Tamagotchi) is.readObject(); if (tama == null) return; is.close(); fis.close(); initializePlayingfield(); Log.d(TAMAGOTCHI, "Done loading the tama"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (OptionalDataException e) { e.printStackTrace(); } catch (StreamCorruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } finally { available.release(); } }
public synchronized void writeProgress(int current_file, int total_files) { try { DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(resume_file, false))); out.writeInt(current_file); out.writeInt(total_files); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); Log.e(TAG, "writeProgress resume.txt not found."); } catch (IOException ex) { Log.e(TAG, "Unable to create resume.txt."); } }