일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- auth
- 상태관리
- java
- 회원가입
- UserAccountsDrawerHeader
- firebase_auth
- swift
- 변수
- GetX
- Null Safety
- Cocoa touch Framework
- 정보처리기사
- flutter
- go_router
- Provider
- firebase
- non-nullable
- 이메일
- dart
- Kotlin
- 로그인
- 안드로이드 스튜디오
- Android
- setState
- 1과목
- StatefulWidget
- BottomNavigationBar
- 안드로이드
- 함수
- IOS
- Today
- Total
앱 개발 공부방
안드로이드 스튜디오-calendarview를 사용하고 일정을 저장하는 기능 본문
calendarview를 사용하여 달력을 만들고 특정 날짜에 일정을 openFileInput, openFileOutput으로 저장하는 기능을 사용하도록 하겠습니다
먼저 저는 로그인을 하여 그 아이디에 따라 일정을 저장하도록 하여서 로그인 및 회원가입 화면도 알고 싶으시면 아래 글을 보고 만들어 주시면 됩니다.
https://cpcp127.tistory.com/10
화면은 이런 식으로 구성되고 현재 보이진 않지만 날짜를 누르면 선택한 날짜, 일정을 쓰거나 보일 text, 수정, 저장, 삭제 기능 버튼 및 textView를 보이도록 하였습니다.
xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<CalendarView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/calendarView"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginLeft="8dp" android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp" android:layout_marginRight="8dp"
app:layout_constraintHorizontal_bias="0.488" android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/textView3"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity= "center"
android:id="@+id/diaryTextView" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/calendarView" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp" android:layout_marginRight="8dp"
app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp"
android:layout_marginStart="8dp" android:textAppearance="@style/TextAppearance.AppCompat.Large"/>
<EditText
android:layout_width="0dp"
android:layout_height="116dp"
android:inputType="textMultiLine"
android:ems="10"
android:id="@+id/contextEditText"
app:layout_constraintTop_toBottomOf="@+id/diaryTextView" android:layout_marginTop="16dp"
android:hint="내용을 입력하세요." android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginRight="8dp" android:layout_marginStart="8dp"
app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp"
android:visibility="invisible"/>
<TextView
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/textView2"
app:layout_constraintTop_toTopOf="@+id/contextEditText"
app:layout_constraintBottom_toBottomOf="@+id/contextEditText" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp" android:layout_marginRight="8dp"
app:layout_constraintStart_toStartOf="@+id/contextEditText" android:layout_marginLeft="8dp"
android:layout_marginStart="8dp" android:visibility="invisible"/>
<TextView
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:gravity="center"
android:text="달력일기장"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textColor="#9E28B3"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:text="저장"
android:layout_width="0dp"
android:layout_marginBottom="20dp"
android:layout_height="wrap_content"
android:id="@+id/save_Btn" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/contextEditText" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp" android:layout_marginRight="8dp"
app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp"
android:layout_marginStart="8dp" android:visibility="invisible"/>
<Button
android:text="수정"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:id="@+id/cha_Btn"
app:layout_constraintBaseline_toBaselineOf="@+id/save_Btn" app:layout_constraintStart_toStartOf="parent"
android:layout_marginLeft="8dp" android:layout_marginStart="8dp"
app:layout_constraintEnd_toStartOf="@+id/del_Btn" android:layout_marginEnd="8dp"
android:layout_marginRight="8dp" android:visibility="invisible"/>
<Button
android:text="삭제"
android:layout_width="176dp"
android:layout_height="wrap_content"
android:id="@+id/del_Btn"
app:layout_constraintBaseline_toBaselineOf="@+id/cha_Btn" app:layout_constraintEnd_toEndOf="@+id/save_Btn"
android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:visibility="invisible"></Button>
</androidx.constraintlayout.widget.ConstraintLayout>
이제 메인 문으로 가기 전에 openFileInput, openFileOutput에 대해 간단히 설명하겠습니다.
안드로이드 기기에서 자료를 저장하는 방법은 크게 4가지가 있습니다.
내부 저장장치, 외부 저장장치, db에 저장, sharedpreferences가 있는데 openFileInput, openFileOutput은 내부 저장장치를 사용하여 저장합니다.
자바의 파일 입출력 스트림을 사용하며, openFileInput, openFileOutput을 사용하여 안드로이드 내부 저장장치에 파일을 생성하여 쓰고 읽기를 하는 방식입니다.
openFileInput : 하위 디렉터리에 있는 응용프로그램 파일을 읽기 모드로 오픈
openFileOutput : 하위 디렉터리에 있는 응용프로그램 파일을 쓰기 모드로 열거나 생성
MainActivity. java
package com.example.project5;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CalendarView;
import android.widget.EditText;
import android.widget.TextView;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MainActivity extends AppCompatActivity {
public String fname=null;
public String str=null;
public CalendarView calendarView;
public Button cha_Btn,del_Btn,save_Btn;
public TextView diaryTextView,textView2,textView3;
public EditText contextEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
calendarView=findViewById(R.id.calendarView);
diaryTextView=findViewById(R.id.diaryTextView);
save_Btn=findViewById(R.id.save_Btn);
del_Btn=findViewById(R.id.del_Btn);
cha_Btn=findViewById(R.id.cha_Btn);
textView2=findViewById(R.id.textView2);
textView3=findViewById(R.id.textView3);
contextEditText=findViewById(R.id.contextEditText);
//로그인 및 회원가입 엑티비티에서 이름을 받아옴
Intent intent=getIntent();
String name=intent.getStringExtra("userName");
final String userID=intent.getStringExtra("userID");
textView3.setText(name+"님의 달력 일기장");
calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
diaryTextView.setVisibility(View.VISIBLE);
save_Btn.setVisibility(View.VISIBLE);
contextEditText.setVisibility(View.VISIBLE);
textView2.setVisibility(View.INVISIBLE);
cha_Btn.setVisibility(View.INVISIBLE);
del_Btn.setVisibility(View.INVISIBLE);
diaryTextView.setText(String.format("%d / %d / %d",year,month+1,dayOfMonth));
contextEditText.setText("");
checkDay(year,month,dayOfMonth,userID);
}
});
save_Btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
saveDiary(fname);
str=contextEditText.getText().toString();
textView2.setText(str);
save_Btn.setVisibility(View.INVISIBLE);
cha_Btn.setVisibility(View.VISIBLE);
del_Btn.setVisibility(View.VISIBLE);
contextEditText.setVisibility(View.INVISIBLE);
textView2.setVisibility(View.VISIBLE);
}
});
}
public void checkDay(int cYear,int cMonth,int cDay,String userID){
fname=""+userID+cYear+"-"+(cMonth+1)+""+"-"+cDay+".txt";//저장할 파일 이름설정
FileInputStream fis=null;//FileStream fis 변수
try{
fis=openFileInput(fname);
byte[] fileData=new byte[fis.available()];
fis.read(fileData);
fis.close();
str=new String(fileData);
contextEditText.setVisibility(View.INVISIBLE);
textView2.setVisibility(View.VISIBLE);
textView2.setText(str);
save_Btn.setVisibility(View.INVISIBLE);
cha_Btn.setVisibility(View.VISIBLE);
del_Btn.setVisibility(View.VISIBLE);
cha_Btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
contextEditText.setVisibility(View.VISIBLE);
textView2.setVisibility(View.INVISIBLE);
contextEditText.setText(str);
save_Btn.setVisibility(View.VISIBLE);
cha_Btn.setVisibility(View.INVISIBLE);
del_Btn.setVisibility(View.INVISIBLE);
textView2.setText(contextEditText.getText());
}
});
del_Btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView2.setVisibility(View.INVISIBLE);
contextEditText.setText("");
contextEditText.setVisibility(View.VISIBLE);
save_Btn.setVisibility(View.VISIBLE);
cha_Btn.setVisibility(View.INVISIBLE);
del_Btn.setVisibility(View.INVISIBLE);
removeDiary(fname);
}
});
if(textView2.getText()==null){
textView2.setVisibility(View.INVISIBLE);
diaryTextView.setVisibility(View.VISIBLE);
save_Btn.setVisibility(View.VISIBLE);
cha_Btn.setVisibility(View.INVISIBLE);
del_Btn.setVisibility(View.INVISIBLE);
contextEditText.setVisibility(View.VISIBLE);
}
}catch (Exception e){
e.printStackTrace();
}
}
@SuppressLint("WrongConstant")
public void removeDiary(String readDay){
FileOutputStream fos=null;
try{
fos=openFileOutput(readDay,MODE_NO_LOCALIZED_COLLATORS);
String content="";
fos.write((content).getBytes());
fos.close();
}catch (Exception e){
e.printStackTrace();
}
}
@SuppressLint("WrongConstant")
public void saveDiary(String readDay){
FileOutputStream fos=null;
try{
fos=openFileOutput(readDay,MODE_NO_LOCALIZED_COLLATORS);
String content=contextEditText.getText().toString();
fos.write((content).getBytes());
fos.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
editText에 자바라 쓰고 저장을 누르면
사진처럼 2020/4/29.txt 파일에 자바. 가 저장되어 29일을 클릭하면 저장된 txt 파일이 출력됩니다.
*참고(코틀린을 자바로 변환하여 사용하였습니다)
'Android-java' 카테고리의 다른 글
안드로이드 스튜디오-파이어베이스 연동 이메일을 통한 로그인 (0) | 2020.05.20 |
---|---|
안드로이드 스튜디오-파이어베이스 연동 (0) | 2020.05.20 |
안드로이드 스튜디오-viewpager,cardview (0) | 2020.03.07 |
안드로이드 스튜디오-공공 데이터 API사용하기 (4) | 2020.03.07 |
안드로이드 스튜디오-음성인식 사용하기 (6) | 2020.03.07 |