2010-12-27 6 views
16

Estoy intentando registrar el tiempo de activación y suspensión desde un selector de diálogo a un archivo de texto como este, pero la llamada al método commitToFile2 no agrega el archivo de texto "savedData.txt".Android anexa el archivo de texto

Sé que este código es muy, muy sucio. Soy nuevo en Java, por lo que cualquier otra sugerencia sería muy apreciada.

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

"Soy nuevo en Java por lo que cualquier otra sugerencia sería muy apreciada." : UTILIZA EL FORMATO DE TU IDE, por Dios mío. Y no nombre las variables locales con límites iniciales (como SleepTimeSetListener, observe cómo se colorea como un tipo anterior). Esto hace que las personas que no son nuevas en Java no puedan leer su código. NO PUBLIQUE información redundante cuando haga preguntas (como '// TODO bloque de capturas generado automáticamente) –

+0

@Mr_and_Mrs_D - Lectura de esto casi 8 años después ... ¡oh Dios mío, chupé! Gracias por guiarme en la dirección correcta! – dell116

+0

Hola, bienvenidos :) –

Respuesta

38

lo he descubierto .... tuve que cambiar la línea

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

a

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

Después de que yo era capaz de anexar el archivo de texto sin sobrescribir los datos que ya estaba dentro del archivo de texto. Gracias por su ayuda chicos. Supongo que ir a la cuarta página en google ES útil a veces.

+1

Esto no retiene 'MODE_WORLD_READABLE', la solución que conserva la legibilidad del mundo es especificada por @Sparkz a continuación –

0

En el método de commitToFile2(), después de la adición de fw.append(entryString); intento fw.flush();

FileWriter es una subclase de OutputStreamWriter y la escritura() de la clase que no necesariamente serán automáticamente los datos de rubor.

+0

Gracias por la entrada de Squonk, pero obtengo los mismos resultados. Los datos en commmitToFile2 nunca se ingresan en el archivo de texto "savedData.txt". Originalmente, las agallas dentro del método commitToFile2 eran las mismas que las tripas que el método interno commitToFile, solo obtenían diferentes argumentos para la cadena "entryString", pero eso sobrescribía el archivo completo. Necesito anexar el archivo de texto con los datos tomados de las subsecuentes listas de vistas ... ¿Alguna idea? – dell116

+0

.... incluso cambiando el fw.append (entryString) a fw.write (entryString) no tiene ningún efecto en el archivo de texto ..... ¿qué demonios? – dell116

15

que es por lo que conservan su MODE_WORLD_READABLE

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