728x90
한빛아카데미 Android Studio를 활용한 안드로이드 프로그래밍 6판
p.335 직접 풀어보기 8-1
[실습 8-1]을 처음에 실행하면 해당 날짜의 일기가 있어도 나오지 않는다. 처음 실행할 때부터 그날의 일기가 있으면 에디트 텍스트에 일기 내용을 출력하고 버튼이 <수정하기>가 되게 한다. 그리고 일기가 없으면 에디트텍스트에 '일기 없음'이라는 힌트가 나오고 버튼이 <새로 저장>이 되게 한다.
코드
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<DatePicker
android:datePickerMode="spinner"
android:id="@+id/datePicker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:calendarViewShown="false" />
<EditText
android:layout_weight="1"
android:id="@+id/edtDiary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00ff00"
android:lines="8" >
</EditText>
<Button
android:id="@+id/btnWrite"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
MainActivity.java
package com.cookandroid.test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
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;
public class MainActivity extends AppCompatActivity {
DatePicker dp;
EditText edtDiary;
Button btnWrite;
String fileName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("간단 일기장");
dp = findViewById(R.id.datePicker1);
edtDiary = findViewById(R.id.edtDiary);
btnWrite = findViewById(R.id.btnWrite);
Calendar cal = Calendar.getInstance();
int cYear = cal.get(Calendar.YEAR);
int cMonth = cal.get(Calendar.MONTH);
int cDay = cal.get(Calendar.DAY_OF_MONTH);
fileName = cYear + "_"+(cMonth + 1) + "_"+ cDay + ".txt";
String str = readDiary(fileName);
edtDiary.setText(str);
dp.init(cYear, cMonth, cDay, new DatePicker.OnDateChangedListener() {
public void onDateChanged(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
fileName = year + "_"+(monthOfYear + 1) + "_"+ dayOfMonth + ".txt";
String str = readDiary(fileName);
edtDiary.setText(str);
btnWrite.setEnabled(true);
}
});
btnWrite.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
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 (IOException e) {
}
}
});
}
String readDiary(String fName) {
String diaryStr = null;
FileInputStream inFs;
try {
inFs = openFileInput(fName);
byte[] txt = new byte[500];
inFs.read(txt);
inFs.close();
diaryStr = (new String(txt)).trim();
btnWrite.setText("수정 하기");
} catch (IOException e) {
edtDiary.setHint("일기 없음");
btnWrite.setText("새로 저장");
}
return diaryStr;
}
}
결과
728x90
'개발 > 책' 카테고리의 다른 글
[명품 웹 프로그래밍] 6장 Open Challenge (0) | 2021.11.07 |
---|---|
[안드로이드 프로그래밍] 7장 직접 풀어보기 7-3 (0) | 2021.10.30 |
[안드로이드 프로그래밍] 7장 직접 풀어보기 7-1 (0) | 2021.10.30 |