1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

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

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Brillow, 06.12.2011.

  1. Brillow, 06.12.2011 #1
    Brillow

    Brillow Threadstarter Neuer Benutzer

    Beiträge:
    10
    Erhaltene Danke:
    2
    Registriert seit:
    25.03.2011
    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
     
  2. Maddi, 06.12.2011 #2
    Maddi

    Maddi Android-Hilfe.de Mitglied

    Beiträge:
    82
    Erhaltene Danke:
    10
    Registriert seit:
    18.07.2010
    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
     
  3. DieGoldeneMitte, 06.12.2011 #3
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    LogCat wirkt Wunder! :D
     
  4. swordi, 06.12.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    was ist das ? :flapper::flapper::flapper::cursing::cursing::cursing:
     
  5. Maddi, 06.12.2011 #5
    Maddi

    Maddi Android-Hilfe.de Mitglied

    Beiträge:
    82
    Erhaltene Danke:
    10
    Registriert seit:
    18.07.2010
    [​IMG]
    :flapper:
     
  6. Brillow, 07.12.2011 #6
    Brillow

    Brillow Threadstarter Neuer Benutzer

    Beiträge:
    10
    Erhaltene Danke:
    2
    Registriert seit:
    25.03.2011
    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());
    
     

Diese Seite empfehlen