2010-12-27 11 views
16

Sto cercando di registrare il tempo di attivazione e il tempo di sospensione da un selettore di finestre in un file di testo come questo, ma la chiamata al metodo commitToFile2 non aggiunge il file di testo "savedData.txt".file di testo Android append

So che questo codice è molto molto sporco. Sono nuovo di Java quindi qualsiasi altro suggerimento sarebbe molto apprezzato.

package com.buttinyourface; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStreamWriter; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.TimePickerDialog; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.TimePicker; 
import android.widget.AdapterView.OnItemClickListener; 

public class SettingsActivity extends Activity { 

    public int wakeHour; 
    public int wakeMinute; 
    public int sleepHour; 
    public int sleepMinute; 
    public String sleepHourText = "No Data"; 
    public String sleepMinuteText = "No Data"; 
    public String outputTime = "No Data"; 
    public String wakeHourText = "No Data"; 
    private ListView lv; 
    Dialog newDialogBox; 
    Context appContext; 
    protected Context context; 
    static final private int WAKE_TIME = 0; 
    static final private int SLEEP_TIME = 1; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.settings); 
     final String[] settingsList = getResources().getStringArray(
       R.array.settingsStringArray); 
     lv = (ListView) findViewById(R.id.list); 
     TextView wakeHourTextView = (TextView) findViewById(R.id.TextView01); 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       int settingsPosition = position; 
       if (settingsPosition == 0) { 
        showDialog(WAKE_TIME); 
        wakeHourText = Integer.toString(wakeHour); 
       } 
       if (settingsPosition == 1) { 
        showDialog(SLEEP_TIME); 
       } 
      } 
     }); 
     lv.setAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, settingsList)); 
     wakeHourTextView.setText(outputTime); 
    } 

    public void onPrepareDialog(int id, Dialog dialog) { 
     switch (id) { 
     case WAKE_TIME: 
      break; 
     case SLEEP_TIME: 
      break; 
     } 
    } 

    @Override 
    public Dialog onCreateDialog(int id) { 
     switch (id) { 
     case WAKE_TIME: 
      return new TimePickerDialog(this, WakeTimeSetListener, wakeHour, 
        wakeMinute, false); 
     case SLEEP_TIME: 
      return new TimePickerDialog(this, SleepTimeSetListener, sleepHour, 
        sleepMinute, false); 
     } 
     return null; 
    } 

    private TimePickerDialog.OnTimeSetListener WakeTimeSetListener = 
          new TimePickerDialog.OnTimeSetListener() { 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      wakeHour = hourOfDay; 
      wakeMinute = minute; 
      String wakeHourText = Integer.toString(hourOfDay); 
      String wakeMinuteText = Integer.toString(minute); 
      String preftime = hourOfDay + ":" + minute; 
      SimpleDateFormat df = new SimpleDateFormat("HH:mm"); 
      SimpleDateFormat dfOut = new SimpleDateFormat("hh:mma"); 
      Date date = null; 
      try { 
       date = df.parse(preftime); 
      } catch (ParseException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      String outputWakeTime = dfOut.format(date); 
      try { 
       commitToFile(wakeHourText, wakeMinuteText, outputWakeTime); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }; 
    private TimePickerDialog.OnTimeSetListener SleepTimeSetListener = 
          new TimePickerDialog.OnTimeSetListener() { 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      sleepHour = hourOfDay; 
      sleepMinute = minute; 
      String sleepHourText = Integer.toString(hourOfDay); 
      String sleepMinuteText = Integer.toString(minute); 
      String preftime = hourOfDay + ":" + minute; 
      SimpleDateFormat df = new SimpleDateFormat("HH:mm"); 
      SimpleDateFormat dfOut = new SimpleDateFormat("hh:mma"); 
      Date date = null; 
      try { 
       date = df.parse(preftime); 
      } catch (ParseException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      String sleepOutputTime = dfOut.format(date); 
      try { 
       commitToFile2(sleepHourText, sleepMinuteText, sleepOutputTime); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }; 

    private void commitToFile(String wakeHourText, String wakeMinuteText, 
      String outputWakeTime) throws IOException { 
     final String entryString = new String("wakeHour=" + wakeHourText 
       + ";wakeMinute=" + wakeMinuteText + ";wakeTime=" 
       + outputWakeTime + ";"); 
     FileOutputStream fOut = openFileOutput("savedData.txt", 
       MODE_WORLD_READABLE); 
     OutputStreamWriter osw = new OutputStreamWriter(fOut); 
     osw.write(entryString); 
     osw.flush(); 
     osw.close(); 
    } 

    private void commitToFile2(String sleepHourText, String sleepMinuteText, 
      String sleepOutputTime) throws IOException { 
     final String entryString = new String("sleepHour=" + sleepHourText 
       + ";sleepMinute=" + sleepMinuteText + ";sleepTime=" 
       + sleepOutputTime + ";"); 
     FileOutputStream fOut = openFileOutput("savedData.txt", 
       MODE_WORLD_READABLE); 
     OutputStreamWriter osw = new OutputStreamWriter(fOut); 
     osw.write(entryString); 
     osw.flush(); 
     osw.close(); 
    } 
} 
+2

"Sono nuovo di Java in modo che qualsiasi altro suggerimento sarebbe molto apprezzato." : USA IL FORMATORE DEL TUO IDE, per il gosh shake. E non nominare le variabili locali con i cappellini iniziali (come SleepTimeSetListener, nota come è colorato come un tipo sopra). Questo rende le persone non nuove a java incapace di leggere il tuo codice. NON POSTARE informazioni ridondanti quando si fanno domande (come '// TODO Blocco catch generato automaticamente ') –

+0

@Mr_and_Mrs_D - Leggendo questo quasi 8 anni dopo ..... oh mio dio ho succhiato! Grazie per avermi guidato nella giusta direzione! – dell116

+0

Hey - welcome :) –

risposta

38

ho capito .... ho dovuto cambiare la linea

FileOutputStream fOut = openFileOutput("savedData.txt", MODE_WORLD_READABLE); 

a

FileOutputStream fOut = openFileOutput("savedData.txt", MODE_APPEND); 

Dopo di che sono stato in grado di aggiungere il file di testo senza sovrascrivere i dati che erano già all'interno del file di testo. Grazie per la vostra assistenza ragazzi. Immagino che andare alla quarta pagina su google sia utile a volte.

+1

Ciò non mantiene 'MODE_WORLD_READABLE', la soluzione che conserva la leggibilità mondiale è specificata da @Sparkz sotto –

0

nel metodo commitToFile2(), dopo fw.append(entryString); prova ad aggiungere fw.flush();

FileWriter è una sottoclasse di OutputStreamWriter e write() i metodi di quella classe non necessariamente i dati 'a filo' automaticamente.

+0

Grazie per l'input Squonk, ma ottengo gli stessi risultati. I dati in commmitToFile2 non vengono mai inseriti nel file di testo "savedData.txt". Originariamente le budella all'interno del metodo commitToFile2 erano identiche all'intestino del metodo commitToFile interno, limitando l'output di argomenti diversi alla stringa "entryString", ma ciò avrebbe sovrascritto l'intero file. Devo aggiungere il file di testo con i dati presi dalle successive listview ... qualche idea? – dell116

+0

.... anche la modifica di fw.append (entryString) su fw.write (entryString) non ha alcun effetto sul file di testo ..... che diavolo? – dell116

15

che è così di conservare la vostra MODE_WORLD_READABLE

openFileOutput("savedData.txt", MODE_APPEND | MODE_WORLD_READABLE);