춤추는 개발자

[Android Studio] 영어단어 앱 만들기 본문

Android/study_til

[Android Studio] 영어단어 앱 만들기

Heon_9u 2020. 12. 13. 17:14
728x90
반응형

영어단어 앱 EnglishDictionary

 DB를 활용해 [내단어장]에 저장하거나 [카카오톡]으로 친구와 문제를 공유할 수 있는 영어단어 앱을 제작합니다. 이번 예제는 Android 환경에서 DB 활용, SNS 공유기능을 익히는 것이 목적입니다.

 기본적으로 책에서 제공하는 이미지와 .txt 파일로 구성했습니다.

 

 

1. txt 파일 내용 확인

 전체 .txt파일은 res/raw폴더에 저장, toeic.txt파일을 예로 들면 내용은 다음과 같다.

 

1 : 비평, 비판 : sympathetic : criticism : secondarily : guard : 2 : *sympathetic 동정적인, 공감하는 *criticism 비평, 비판 : *secondarily 종속적으로, 두 번째로 *guard 지키다, 경계하다 : 0

2 : 비 도덕적인 : immoral : sociality : compliment : allot : 1 : *immoral 비 도덕적인 *sociality 사교성 : *compliment 칭찬 *allot 할당하다 : 0

3 : 면도기 : threaten : mechanism : razor : attraction : 3 : *threaten ~을 위협하다 *mechanism 기계구조, 기계화 : *razor 면도기 *attraction 매력, 만유 인력 : 0

4 : 명부에 올리다 : chemistry : customary : list : daily : 3 : *chemistry 화학 *customary 습관적인, 통상적인 : *list 명부에 올리다 *daily 매일의 : 0

5 : 나르다, 지니다, 취급하다 : carry : imitation : unveil : revolution : 1 : *carry 나르다, 지니다, 취급하다 *imitation 모방 : *unveil 밝히다, 털어놓다 *revolution 혁명 : 0

6 : 축소하다 : attached : count on : waive : downsize : 4 : *attached 첨부된 *count on 믿다 : *waive 면제(포기)하다 *downsize 축소하다 : 0

7 : 부패하다, 쇠퇴하다 : resume : fatality : decay : introduce : 3 : *resume 이력서, 개요, 다시 시작하다 *fatality 죽음, 참사 : *decay 부패하다, 쇠퇴하다 *introduce 소개하다, 도입하다 : 0

8 : ~을 호되게 꾸짖다 : impression : claim : advantage : chew out : 4 : *impression 인상, 감명, 감동 *claim 요구하다, 청구하다 : *advantage 유리, 이익 *chew out ~을 호되게 꾸짖다 : 0

9 : 잡담, 수다 : surround : chat : at least : request : 2 : *surround 둘러싸다 *chat 잡담, 수다 : *at least 적어도 *request 요구, 주장 : 0

10 : 서술의 : efficiency : radio station : commute : recitative : 4 : *efficiency 능력, 효율성 *radio station 방송국 : *commute 통근하다 *recitative 서술의 : 0

 

각 첨자를 콜론(:)으로 구분지었고 실제 코드에서는 split(":")을 활용해 문자열 배열에 저장해서 사용한다. 첫번째 줄을 예시로 들면 아래와 같다.

 

첨자 역할
0 1 문제 번호
1 비평, 비판 문제
2 sympathetic 객관식 1번 내용
3 criticism 객관식 2번 내용
4 secondarily 객관식 3번 내용
5 guard 객관식 4번 내용
6 2 정답 번호
7 sympathetic : 동정적인
criticism : 비평, 비판
문제를 풀고 난 후에 해설아이콘을 터치하면 나오는 설명
8 secondarily : 종속적으로, 두번쨰로
guard : 지키다, 경계하다
9 0 평가(TEST)에서 사용하는 값, 같은 문제가 출제되는 것을 막기 위해 사용된 값

 

2. txt 내용 분리하기

 FileTable 클래스로 .txt파일을 불러와 data배열에 저장하면 FileSplit 클래스에서 이를 정제한 후, 활용합니다.

 

메소드 명 역할
openRawResource() 매개변수로 받은 값에 따라 .txt파일을 불러옴.
available() 불러온 파일의 크기를 구할 수 있으며, 배열의 크기를 결정짓는데 활용할 수 있다.
read() 읽은 값을 매개변수에 저장.

 

3. 안드로이드의 DBMS(SQLite)

 안드로이드는 SQLite를 지원하여 데이터를 쉽게 저장, 수정할 수 있다. 이를 위해 사용하는 클래스와 인터페이스는 아래 표와 같다.

 

클래스, 인터페이스 Method 활용하기
SQLiteOpenHelper class 생성자 DB를 생성한다.
onCreate() Create Table 명령으로 테이블을 생성.
onUpgrade() DB가 업그레이드될 필요가 있을 때 기존 테이블을 삭제 및 새로운 테이블 생성
getWritableDatabase() 쓰고 읽을 수 있는 DB를 실행.
SQLiteDatabase 객체를 반환, SQLiteDatabase가 가지고 있는 메소드를 사용할 수 있다.
getReadableDatabase() 읽을 수 있는 DB를 실행.
SQLiteDatabase 객체를 반환.
SQLiteDatabase Class execSQL() Insert into : 레코드를 테이블에 추가
Update : 존재하는 레코드값 변경
Delete: 테이블에서 레코드 삭제
close() DB 종료
query(), rawQuery() query()를 실행 후, 커서를 반환.
Select문을 사용할 때는 rawQuery()를 사용.
Cursor Interface moveToFirst 커서를 레코드 제일 첫 행으로 이동
moveToNext() 커서를 레코드 다음 행으로 이동
moveToLast() 커서를 레코드 마지막 행으로 이동
moveToPosition() 커서를 원하는 위치로 이동

 

MyDBHelper m_helper = new MyDBHelper(mContext, "test.db", null, 1);

class MyDBHelper extends SQLiteOpenHelper {
	public DBHelper(Context context, String name, CursorFactory factory) {
    	super(context, name, factory, version);
    }
}

 

 위 코드처럼 SQLiteOpenHelper를 상속받아 활용할 수 있다. 

 

 

기능 예시
테이블 생성 db.execSQL("CREATE TABLE englishWordTable (_id INTEGER PRIMARY KEY AUTOINCREMENT," + "eWord TEXT, kWord TEXT);");
레코드 삽입하기 String sql = String.format("INSERT INTO englishWordTable VALUES(NULL, '%s', '%s');", input1, input2);
레코드 삭제하기 String sql = String.format("DELETE FROM englishWordTable WHERE eWord = '%s'", wordToDelete);

 

4. 각 클래스들의 실행 절차

 시작화면에서 사용자의 선택에 맞게 .txt파일의 내용을 불러오고 가공한다. 가공한 내용을 xml파일로 화면을 구성하게 만드는데 이때 SurfaceView를 상속받은 클래스 파일을 실행해서 보여준다.

 

StartCsc에서 main1이라는 id를 가진 버튼을 클릭할 경우, startActivity 메소드에의해 ActicityStudy파일로 화면 전환.

 

StartCsc.java

 

setContentView 메소드에 의해 wordstudy.xml이라는 layout으로 화면을 구성하게 된다.

 

ActivityStudy.java

 

FrameLayout으로 구성된 xml 파일 안에는 SurfaceView를 상속받은 StudyView로 화면을 구성한다.

 

wordstudy.xml

 

SurfaceView를 상속받은 StudyView는 Callback과 GestureListener, GestureDetector를 인터페이스로 받는다. 생성자를 보면 SurfaceHolder의 addCallback() 메서드와 StudyThread를 이용해서 원하는 시점에 View를 화면에 띄울 수 있다. 이는 다른 포스팅에서 언급하도록 하겠습니다.

 

StudyView.java

전체적인 클래스의 실행 절차는 StartCsc - ActivityStudy - wordstudy - StudyView 순으로 진행된다. 이외에도 반응형 이미지 크기나 인터페이스들의 default로 구현해야될 메소드, [내노트]에 저장된 영어단어를 확인하거나 삭제하는 기능들이 존재한다. 이는 다음 포스팅에서 진행하도록 하겠습니다.

728x90
반응형