Android2009. 12. 29. 19:20

  Day1에서 공부한 내용에 파일 입출력만 추가시켜주면 될 줄 알았는데 어제 공부한거 다 까먹었다. ㅜㅠ
파일 입출력에 관한 내용만 공부하려다 어제 공부한거 복습도 할겸 해서 생각한 테스트 어플이 메모장이였는데 정말 간단히 만들자 생각해서 간단할 줄 알았는데 힘들다 힘들어 ㅜㅠ;; 간단한 것도 이렇게 힘들줄이야~

구현 내용
  1. 메뉴 구성
    - 타이틀 제목/New/Open/Exit 로 구성
  2. New 버튼
    - 메모입력창을 띄운다.
    - 텍스트입력창 (상단) : 메모의 내용을 입력받는다.
    - 텍스트입력창 (하단) : 한줄로 메모의 내용을 저장시킬 파일 이름을 입력 받는다.
    - 버튼 (SAVE) : 바로 저장해 버린다.
    - 버튼 (MENU) : 초기 메뉴로 나가버린다.
  3. Open 버튼 - 아직 미구현
    - 저장되어 있는 파일들을 보여준다.
    - 사용자가 파일을 선택하면 스크롤 뷰 레이아웃을 이용해 내용을 보여주기만 한다.
    - 버튼 (EDIT) : 읽고있는 내용을 메모입력창으로 보내 사용자가 편집할 수 있게 한다.
    - 버튼 (MENU) : 초기 메뉴로 나가버린다.
  4. Exit 버튼
    - 어플 종료

구현 결과


초기 메뉴 구성
  • LinearLayout을 사용해서 간단하게 구현.
    - 별거 없다 ㅡ.,ㅡ;;

















NEW버튼 클릭시 메모 입력창 구현
  • RelativeLayout을 사용해 하단 버튼 부분부터 시작해 android:layout_above를 이용해 차례대로 구현.
    메모 내용을 입력받을 EditText창은 가로, 세로 fill_parent로 채우고 android:layout_above와 android:layout_below를 이용해 나머지 부분
    을 모두 사용 할 수 있도록 정렬 시킴.
  • 내용 입력 EditText에 android:scrollbars="vertical" 를 추가시켜 내용이
    많으면 자동으로 스크롤바가 생기게 한다.
  • 메시지만 보여주는 액티비티를 만들어 에러사항이나 경과를 사용자에게
    알려준다.
    - SAVE버튼을 눌렀을때 경우의 수
      (경우1) 파일이름 정해주는 공간이 비어있다
      (경우2) 지정한 파일 이름이 이미 존재 한다.
      (경우3) 아무 문제없이 저장 완료








SAVE버튼을 눌렀을 때의
메세지 출력
- 하나의 액티비티에서 각기 다른 메세지를 출력 할 수 있게한다.


- 아무 이상이 없을 경우 파일을 저장한 후 OK버튼을 누르면 모든 상황을 종료하고 초기 메뉴로 나간다.







- 파일 이름을 입력 받는 곳이 비어있을때.








- 저장할 파일 이름이 이미 있을때.
  







 
일반 윈도우 메모장을 사용해 저외의 경우의 수도 생각하여 추가로 만드는것도 공부에 도움이 될듯하다. 저장을 완료하고 초기 메뉴로 넘어가지 말고 저장된 내용을 스크롤 뷰를 통해 보여준다던지 저장할 파일 이름이 이미 있을땐 덮어씌울건지 물어본다던지 등등등. 
다! 걍 넘어가야 겠다. ㅋㅋㅋ
( 걍 파일 입출력만 테스트 해보고 넘어갈걸 그랬나 ㅜㅠ )



파일 입출력 - 저장 부분 주요 메소드
        try {
            EditText et = (EditText)findViewById(R.id.et_edit);
            byte[] buffer = stringToByte(et.getText().toString());                 
            FileOutputStream fos = openFileOutput(sName, Context.MODE_PRIVATE);
            fos.write(buffer);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Intent intent = new Intent(Edit.this, Message.class);
        intent.putExtra("WARNING", SAVE_COMPLETE);
        startActivityForResult(intent, 0);
    }

 아직 파일을 열어보기까지는 구현을 못시켜서 저장된 파일을 직접 확인해 보려고 하드디스크를 열심히 찾아봤지만 없었다. 직접 찾지는 못하고 file.getPath()로 확인해보니 저장되어 있는 곳이
/data/data/<package name>/app_(filename).txt 였다. apk파일도 풀어보고 이곳저곳 다 찾아봤지만 안드로이드 에뮬레이터가 보안을 위해 꼭꼭 숨겨논거라 판단하고 넘어갔다. ^___^
 위 코드에서 byte배열인 buffer에 string값을 byte로 변환한걸 다시 byteToString 메소드를 이용해 확인해보니 저
장된 값은 문제 없었다.







 만들면서 발견한 문제들


1.
EditText 입력창에 글자를 치려고만 하면 하단부분에 키보드가 나와버려 레이아웃에 구현한 화면 자체들이 모두 올라가 버려 화면처럼 수정중인 글자를 확인 할 수가 없게 된다. ㅜㅠ;;

2. 처음 EditText 입력시에 화면의 세로 사이즈의 중앙에 커서가 위치해 있다.

3. 메세지 출력창(저장완료버튼)에서 OK버튼을 누르면 finish()를 통해 액티비티들을 모두 종료시킬 수 있었지만 에뮬레이터의 
(이전)버튼도 보여주는 창을 닫는기능때문에 버튼에 대한 정의를 내려줘야 하는데 리스너를 찾지 못해 이전 버튼을 누르면 finish()가 안되고 오류를 뿜어 버린다.


















소스 보관

Posted by ™설야