Android Studio를 활용한 안드로이드 프로그래밍 P335 직접 풀어보기 8-1
실습 8-1을 처음 실행하면 데이트피커의 초기날짜(2020-5-19)에 텍스트파일이 있을 경우
그날의 일기가 뜨지않고 아래와 같은 화면이 뜨는데, 초기날짜의 텍스트파일이 있을 경우 에디드텍스트에
일기를 출력하고, 일기가없을 시 "일기 없음" 힌트가 나오고 버튼은 <새로 저장> 이 되게 수정하라.
<수정 전 화면(실습 8-1)>
<수정 후 화면>
1. 최초 실행 시 데이트피커에 설정 된 날짜(2020-5-19)에 텍스트가 없을 때
2. 최초의 데이트피커 날짜값의 파일(2020_5_19.txt)이 있을 경우
(실행 전 2020_5_19에 해당하는 텍스트파일을 만들고 내용 작성 후 내장 메모리에 저장해야합니다.)
activity_main.xml 코드
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<DatePicker
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/datePicker"
android:datePickerMode="spinner"
android:calendarViewShown="false"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edtDiary"
android:background="#00ff00"
android:lines="8"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="BUTTON"
android:enabled="false"
android:id="@+id/btnWrite"/>
</LinearLayout>
MainActivity 코드
우선, pc바탕화면에서 초기의 데이트피커에 설정된 날짜에 해당하는 메모장파일을 만들어 내용을 입력 후 저장 한 다음,
안드로이드 스튜디오의 해당 응용프로그램(진행 중인 프로젝트)의 내장 메모리(data/data/패키지명/files)에 만들어둔 파일을 업로드합니다.
코드를 보면, 실습 코드의 init메소드는 데이트 피커의 초기값을 설정해주고 날짜 변경리스너를 포함하기 때문에
초기화 메소드전에 아래와 같은 코드를 작성하여 최초 실행 시 기본으로 설정되어있는 데이트피커의 날짜 값에 해당하는
메모장이 있을 경우 에디트텍스트로 출력할 수 있게 합니다.
String filename1= Integer.toString(cYear)+"_"+Integer.toString(cMonth+1)+"_"+Integer.toString(cday)+".txt";
String str1=readDiary(filename1);
edtDiary.setText(str1);
btnWrite.setEnabled(true);
전체코드는 아래와 같습니다.
package com.example.p327test;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.zip.Inflater;
public class MainActivity extends AppCompatActivity {
String filename;
DatePicker dp;
Button btnWrite;
EditText edtDiary;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dp=(DatePicker)findViewById(R.id.datePicker);
btnWrite=(Button)findViewById(R.id.btnWrite);
edtDiary=(EditText)findViewById(R.id.edtDiary);
setTitle("간단 일기장");
Calendar cal=Calendar.getInstance();
int cYear=cal.get(Calendar.YEAR);
int cMonth=cal.get(Calendar.MONTH);
int cday=cal.get(Calendar.DAY_OF_MONTH);
String filename1= Integer.toString(cYear)+"_"+Integer.toString(cMonth+1)+"_"+Integer.toString(cday)+".txt";
String str1=readDiary(filename1);
edtDiary.setText(str1);
btnWrite.setEnabled(true);
dp.init(cYear,cMonth,cday, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker datePicker, int i, int i1, int i2) {
filename=Integer.toString(i)+"_"+ Integer.toString(i1+1)+"_"+Integer.toString(i2)+".txt";
String str=readDiary(filename);
edtDiary.setText(str);
btnWrite.setEnabled(true);
}
});
btnWrite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
FileOutputStream outfs=openFileOutput(filename, Context.MODE_PRIVATE);
String str=edtDiary.getText().toString();
outfs.write(str.getBytes());
outfs.close();
Toast.makeText(getApplicationContext(),filename+"이 저장됨",Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
String readDiary(String filename) {
String diaryStr=null;
FileInputStream infs;
try {
infs=openFileInput(filename);
byte txt[]=new byte[500];
infs.read(txt);
infs.close();
diaryStr=(new String(txt)).trim();
btnWrite.setText("수정하기");
} catch (FileNotFoundException e) {
edtDiary.setHint("일기없음");
btnWrite.setText("새로 저장");
} catch (IOException e) {
e.printStackTrace();
}
return diaryStr;
}
}
'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글
직접 풀어보기 9-1 (0) | 2020.06.07 |
---|---|
직접 풀어보기 8-2 (15) | 2020.05.20 |
직접 풀어보기 7-3 (0) | 2020.05.19 |
직접 풀어보기 7-2 (4) | 2020.05.19 |
직접 풀어보기 7-1 (0) | 2020.05.18 |