2010-12-27 35 views
16

Tôi đang dò tìm thời gian đánh thức và thời gian ngủ từ bộ chọn hộp thoại đến tệp văn bản như thế này, nhưng lệnh gọi phương thức commitToFile2 không nối thêm tệp văn bản "savedData.txt".Android chắp thêm tập tin văn bản

Tôi biết mã này rất rất bẩn. Tôi mới đến Java vì vậy bất kỳ đề xuất khác sẽ được đánh giá rất nhiều.

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

"Tôi mới đến Java vì vậy bất kỳ lời đề nghị khác sẽ được đánh giá rất nhiều." : SỬ DỤNG ĐỊNH CỦA IDE CỦA BẠN, để lắc gosh. Và không đặt tên biến cục bộ bằng các ký tự ban đầu (như SleepTimeSetListener, chú ý cách nó được tô màu như kiểu trên). Điều này làm cho mọi người không quen với java không thể đọc được mã của bạn. KHÔNG gửi thông tin dư thừa khi đặt câu hỏi (như '// TODO khối catch được tạo tự động') –

+0

@Mr_and_Mrs_D - Đọc phần này gần 8 năm sau ..... Ôi trời ơi, tôi đã hút! Cảm ơn bạn đã hướng dẫn tôi đi đúng hướng! – dell116

+0

Xin chào - chào mừng bạn :) –

Trả lời

38

I figured it out .... Tôi đã phải thay đổi dòng

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

để

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

Sau đó tôi đã có thể thêm các tập tin văn bản mà không ghi đè lên dữ liệu đó là đã bên trong tệp văn bản. Cảm ơn các bạn đã hỗ trợ. Tôi đoán sẽ đến trang thứ 4 trên google IS hữu ích đôi khi.

+1

Điều này không giữ lại 'MODE_WORLD_READABLE', giải pháp duy trì khả năng đọc của thế giới được chỉ định bởi @Sparkz bên dưới –

0

Trong phương pháp commitToFile2() của bạn, sau fw.append(entryString); thử thêm fw.flush();

FileWriter là một lớp con của OutputStreamWriter và write() phương pháp của lớp đó sẽ không nhất thiết phải 'xả' dữ liệu tự động.

+0

Cảm ơn bạn đã nhập Squonk, nhưng tôi nhận được kết quả tương tự. Dữ liệu trong commmitToFile2 không bao giờ được nhập vào tệp văn bản "savedData.txt". Ban đầu ruột bên trong phương thức commitToFile2 giống như ruột như phương thức commitToFile bên trong, chỉ xuất các đối số khác nhau cho chuỗi "entryString", nhưng nó sẽ ghi đè lên toàn bộ tệp. Tôi cần phải nối thêm textfile với dữ liệu được lấy từ listViews tiếp theo .... bất kỳ ý tưởng nào? – dell116

+0

.... thậm chí thay đổi fw.append (entryString) thành fw.write (entryString) không ảnh hưởng đến tệp văn bản ..... cái quái gì? – dell116

15

đó là để bạn giữ lại của bạn MODE_WORLD_READABLE

openFileOutput("savedData.txt", MODE_APPEND | MODE_WORLD_READABLE); 
Các vấn đề liên quan