2010-12-27 13 views
16

Tringuje, aby zarejestrować czas wybudzenia i czas uśpienia z wyboru okna dialogowego do pliku tekstowego takiego jak ten, ale wywołanie metody commitToFile2 nie dołącza pliku tekstowego "savedData.txt".Plik tekstowy dołączania Androida:

Wiem, że ten kod jest bardzo brudny. Jestem nowy w Javie, więc wszelkie inne sugestie będą mile widziane.

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

„Jestem nowy w Javie więc wszelkie inne sugestie będą bardzo mile widziane.” : WYKORZYSTAJ SWÓJ FORMATTER IDE, bo drżysz. I nie nazwij zmiennych lokalnych za pomocą początkowych limitów (takich jak SleepTimeSetListener, zauważ, jak jest barwiony jak typ powyżej). To sprawia, że ​​ludzie nie są nowicjuszami, których java nie jest w stanie odczytać kodu. NIE POSTAJ nadmiarowych informacji podczas zadawania pytań (np. '// TODO Auto-generowany blok catch ') –

+0

@Mr_and_Mrs_D - Czytanie tego prawie 8 lat później ..... o mój Boże, do dupy! Dzięki, że poprowadziłeś mnie we właściwym kierunku! – dell116

+0

Hej - witamy :) –

Odpowiedz

38

I zdobione .... musiałem zmienić linię

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

do

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

Potem udało mi się dołączyć plik tekstowy bez nadpisywania danych, które już było wewnątrz pliku tekstowego. Dzięki za pomoc dla facetów. Wydaje mi się, że czasami warto przejść na czwartą stronę w Google IS.

+1

To nie zachowuje "MODE_WORLD_READABLE", rozwiązanie, które zachowuje czytelność na całym świecie, jest określone przez @Sparkz poniżej –

0

W metodzie swojej commitToFile2(), po fw.append(entryString); spróbuj dodać fw.flush();

FileWriter jest podklasą OutputStreamWriter i write() metody tej klasy nie będzie automatycznie koniecznie przepłukać dane ''.

+0

Dzięki za wejście Squonk, ale dostaję te same wyniki. Dane w commmitToFile2 nigdy nie są wprowadzane do pliku tekstowego "savedData.txt". Pierwotnie wnętrzności w metodzie commitToFile2 były takie same jak odwrotność, jak w wewnętrznej metodzie commitToFile, po prostu wyprowadzanie różnych argumentów do ciągu "entryString", ale to nadpisałoby cały plik. Muszę dołączyć plik tekstowy z danymi pobranymi z kolejnych listViews .... jakichkolwiek pomysłów? – dell116

+0

.... nawet zmiana fw.append (entryString) na fw.write (entryString) nie ma wpływu na plik tekstowy ..... co do cholery? – dell116

15

to więc zachować MODE_WORLD_READABLE

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