마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

프래그먼트에 메모장 어플을 넣었는데 자꾸 강제종료됩니다ㅠㅠ

0 추천

 

TextFileManager.java



public class TextFileManager extends Fragment {

    private static final String FILE_NAME="Memo.txt";

    Context mContext = null;

    public TextFileManager(Context context){
        mContext = context;
    }

    //파일에 메모를 저장하는 함수
    public void save(String strData){
        if( strData == null || strData.equals("")){
            return;
        }
        FileOutputStream fosMemo = null;

        try{
            //파일에 데이터를 쓰기 위해 OUTPUT스트림 생성
            fosMemo = mContext.openFileOutput(FILE_NAME, Context.MODE_PRIVATE);

            //파일에 메모 작성
            fosMemo.write(strData.getBytes());
            fosMemo.close();

        } catch (Exception e){
            e.printStackTrace();
        }
    }

    //저장된 메모를 불러오는 함수
    public String load(){
        try{
            //파일에서 데이터를 읽기 위해서 input스트림 생성
            FileInputStream fisMemo = mContext.openFileInput(FILE_NAME);

            //데이터를 읽어 온 뒤, String 타입 객체로 반환
            byte[] memoData = new byte[fisMemo.available()];
            while(fisMemo.read(memoData)!=-1){}

            return new String(memoData);
        } catch(IOException e){}

        return"";
    }

    public void delete(){
        mContext.deleteFile(FILE_NAME);
    }


}

문제가 없는 것 같은데 자꾸 강제종료됩니다 ㅠㅠ 제발 도와주세요 이유를 모르겠어요.. 

화면 실행은 제대로 되는데 버튼(저장, 수정,불러오기)을 누르면 강제종료가 됩니다..

글자수 초과로 MypageFragment는 올리지 못했어요..

JADY (120 포인트) 님이 2020년 12월 6일 질문
will Kim, 말씀 처럼 Fragment를 상속받은 거는 일단 이상하구요.  Fragement라면 디폴트 생성자가 있어야만 하고, 프레그먼트 자체에서 requireContext() 를 Context에 접근할 수 있기 때문에 생성자에 Context를 받으실 필요도 없고 받으셔도 안됩니다.
우선은 아무래도 생성자에 Context를 받는 부분이 문제가 될 수 있을 것 같습니다. 생성자를 디폴트 생성자로 바꾼신 다음, 컨텍스를 사용하는 코드에서 컨텍스트가 정확하게 초기화 되었는지 확인해 보세요.

1개의 답변

0 추천
그냥 일반 클래스인 것 같은데 왜 extends Fragment가 달려있죠?

그것 때문에 죽진 않은 것 같은데..

아래에 파일명이 왜 static인가요?

private static final String FILE_NAME="Memo.txt";

갑자기 죽었다면 오류가 날텐데, 오류를 로그로 출력해서

해당 오류로 구글링하면 해법이 나옵니다.

반드시 오류를 가지고 원인을 찾으셔야 합니다.

구글링으로 1분이면 해결될 수 있는데, 여기에 올리면 시간 오래 걸리잖아요.
Will Kim (43,170 포인트) 님이 2020년 12월 7일 답변
...