Leigh8347
Leigh8347

Reputation: 91

Android - time not updating

im making an app that writes to a .txt file and at the end of each "save" i want to put the date and time.

this is my code that turns the time/date into a string then saves it to file.

public class SaveFile extends Activity {

EditText txtData;
EditText txtData2;
Button btnWriteSDFile;
Button btnDelete;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.form);

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
    Date date = new Date(System.currentTimeMillis());
    final String datetime = dateFormat.format(date);

txtData = (EditText) findViewById(R.id.input1);
txtData2 = (EditText) findViewById(R.id.input2);

btnWriteSDFile = (Button) findViewById(R.id.save);
btnWriteSDFile.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
    // write on SD card file data in the text box

    try {
        BufferedWriter out = new BufferedWriter(new FileWriter("/sdcard/data_file.txt", true));
        out.write(txtData.getText() + "," + txtData2.getText() + "," + datetime.toString());
        out.write("\r\n");
        out.close();
        Toast.makeText(v.getContext(),"Saved",Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        Toast.makeText(v.getContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
    }


        txtData.setText("");
        txtData2.setText("");


}// onClick
}); // btnWriteSDFile

}// onCreate

}// AndSDcard

The problem im having is every time i save the time does not update. each row has the same time and date? can anybody help? regards

Upvotes: 1

Views: 432

Answers (2)

Lycha
Lycha

Reputation: 10177

You always write the time on datetime object that is created only once in the onCreate(). You should get the current time each time in onClick().

To do this, you should se the formatter as class object and then create new Date every time when writing to file:

out.write(txtData.getText() + "," + txtData2.getText() +
          "," + dateFormat.format(new Date());

Notice that new Date() automatically gets the current time and date.

Upvotes: 1

Mark Byers
Mark Byers

Reputation: 838376

You are getting the current time once and reusing it. You should get the current time inside the event handler:

public void onClick(View v) {
    // write on SD card file data in the text box    
    try {
        BufferedWriter out = new BufferedWriter(new FileWriter("/sdcard/data_file.txt", true));
        Date date = new Date(System.currentTimeMillis());
        final String datetime = dateFormat.format(date);       
        out.write(txtData.getText() + "," +
                  txtData2.getText() + "," +
                  datetime.toString());
        out.write("\r\n");
        out.close();
        Toast.makeText(v.getContext(),"Saved",Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        Toast.makeText(v.getContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
    }

    txtData.setText("");
    txtData2.setText("");
}

Upvotes: 1

Related Questions