Daten im internen Speicher sichern und Probleme mit Date().

B

Brillow

Neues Mitglied
2
Hi,

ich schreibe gerade eine kleine App, um mich wieder in Java reinzufinden und stoße dabei im Moment auf 2 Probleme, die ich einfach nicht verstehe.

1.
Würde ich gerne einen String (eine Datei) lokal speichern. Dazu habe ich folgende Methoden geschrieben (einmal zum speichern, einmal zum laden).

Code:
try {
			FileOutputStream fos = openFileOutput(filename[s-2], Context.MODE_WORLD_READABLE);
			OutputStreamWriter osw = new OutputStreamWriter(fos);
			
			osw.write(data[s-2]);
			
			osw.flush();
			osw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			
			clear();
			title4.setText("Konnte Daten nicht speichern!");
			title4.setTextColor(Color.RED);
		}

filename ist ein array, wo meine Dateinamen drinstehen, im data Array steht jeweils der String der gespeichert werden soll.

Zum Laden:
Code:
private void load(int m) {
		File datei = new File(filename[m-2]);
		GregorianCalendar lastmod = new GregorianCalendar();
		
		lastmod.setTimeInMillis(datei.lastModified());
		
		this.setTitle("" + lastmod.get(Calendar.WEEK_OF_YEAR) + " - " + date.get(Calendar.WEEK_OF_YEAR));
		
		if(lastmod.get(Calendar.WEEK_OF_YEAR) == date.get(Calendar.WEEK_OF_YEAR)){
			//Wird die App genau ein Jahr lang nicht geoeffnet, so bildet sich hier ein Fehler
			try {
				FileInputStream fis = openFileInput(filename[m-2]);
				InputStreamReader isr = new InputStreamReader(fis);
				char buffer[] = null;
				
				isr.read(buffer);
				
				data[m-2] = new String(buffer);
				
				fis.close();
				
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				fetchData(m);
			} catch (IOException e){
				e.printStackTrace();
				fetchData(m);
			}
		}else{
			fetchData(m);
		}
	}

Das Problem ist nun: es funktioniert nicht. Es wird keine Datei erstellt, egal wie ichs auch drehe und wende. Meiner Meinung nach liegt der Fehler entweder in dem save/load kram oder in der Umrechnung der verschiedenen Datumsangaben oben in der load().

Ich hoffe ihr könnt mir da irgendwie helfen und bitte schlagt mich nicht, wenns irgendein dummer, ersichtlicher Fehler ist ;)

MfG
Brillow
 
Es wär einfacher wenn du den Fehler eingrenzen kannst.
Ist die Datei den auf dem Handy (oder Emulator) nachdem du gespeichert hast?

Wenn nicht guck mal ob die:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

gesetzt ist.

Gruß Maddin
 
logcat.png

:flapper:
 
Danke für die Antworten, ich habs nun gefunden. Es ist nicht die Permission, die benötigt man nicht für den internen Speicher. LogCat gibt mir auch nichts aus. Habe nun aber rausgefunden, dass es daran lag, dass ich die File falsch initialisiert habe und daher das "lastModified()"-Datum immer 0 war. Richtig ist es dann so:

Code:
GregorianCalendar lastmod = new GregorianCalendar();
		File datei = getFileStreamPath(filename[m-2]);	
		
		lastmod.setTimeInMillis(datei.lastModified());
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
127
swa00
swa00
A
Antworten
10
Aufrufe
1.919
swa00
swa00
S
Antworten
4
Aufrufe
995
Sempervivum
S
Zurück
Oben Unten