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

어떠한 익셉션을 처리 해야할까요?

0 추천

storage access framework로 usb 저장소의 디렉토리를 선택해서 파일을 직접 다운로드받습니다.

받는건 문제가 없는데 도중에 otg핀을 강제로 해제하는 경우에 익셉션 처리를 하고 싶은데,

할 수있는 곳에 try catch를 걸어도 해당 다운로드 페이지가 종료되고 메인으로 빠집니다.

강종이라 그런지 ondestroy도 걸리지 않습니다.

asynctask안의 파일을 처리하는 doinbackgroud 부분에서 

에러문을 걸어서 에러 result가 98일 때 다운로드를 중지하고 

onPostExecute로 넘어가서 case 98: 까지는 가지는데요...여기서 멈추고 싶은데,

그냥 다운로드 액티비티 자체가 종료가 되어버리네요;

검은화면으로 전환되는거보니 강제종료현상같습니다. 

아마 중간에 otg를 빼버려서 디렉토리?가 없어졌기 때문에 파일을 write할 수 없는 상황이라

에러가 난것은 확실한데요..

다큐멘트파일 uri를받고 for문을 돌려서 파일을 받는 부분입니다.

중간에 취소버튼을 누르면 isCancelled를 체크해서 return 5값을 주고 나가구요..

이 포문위에 try catch로 감싸서 Exception e로 토스트 띄우는 것도 했는데도 

어디로 에러가 발생하는 것인지 계속 해당 액티비티가 중지 됩니다.

다운로드를 받지 않고 usb를 꼈다 빼면 이상이 없는데, 다운로드 중 usb를 빼면 강종현상이 발생하네요..

어떤 부분에서 정확히 try-catch를 처리해야할지 모르겠습니다..

for (;;) 
{
try
{
read = is.read(buffer);
total += read; // 읽은 데이타 만큼 누적
int progress_temp = (int) ((double) total / myremains * 100);
publishProgress("" + progress_temp);
if (progress_temp % 10 == 0 && progress != progress_temp) {
	progress = progress_temp;
}
if (read <= 0) 
{
break;//종료한다.
}
fosFile.write(buffer, 0, read);
if (isCancelled()) {
// 다이얼로그에서 취소버튼을 눌렀을 때
Log.e("취소되었다", "취소되었다");
return 5;
}
}
catch(IOException e)
{
	Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_LONG).show();
}
	} // for

+

혹은, 파일을 모두 다운로드 받고나서 onPostExecute에서 다이얼로그를 띄워주고 난 뒤 바로

해제하면 비슷한 증상이 발생하는데요, 

혹시 input,outstream등을 제대로 close하지 않으면 강종현사이 발생하는지요?

지금보니 close안한 변수들이 몇개 있어서요..일단은 작업끝난 후 무조건 close하려고 합니다.

+

혹시 몰라서 asynctask에서 onpre-doinback-onpost 기본 형식만 남기고

나머지 변수나 작업 코드들을 주석처리한 후, 실행해도 otg를 빼면 강종되는 현상이 발생합니다..

 

오류해결하기 님이 2017년 12월 18일 질문
2017년 12월 18일 수정

2개의 답변

0 추천
catch(Error e) 로 에러에 대해서도 catch 해 보세요.
익명사용자 님이 2017년 12월 18일 답변
답변감사합니다.현재 유선디버깅이 불가능해서 toast로 확인을 하고있습니다 ㅠ
무선디버깅을 하려는데 데스크탑에 wifi연결이 안되는것 같기도하고요...ㅠ
0 추천
첨부해 주신 소스는 doInBackground() 같은데,

거기서 Toast 하면서 Runtime 에러가 발생하여 앱이 강제종료되는것 같습니다.
눈빛 (4,120 포인트) 님이 2017년 12월 19일 답변
답변감사합니다. 그러고보니 doinbackgroud내부에서 toast를 띄우면 ui 에러가 발생한다고 들은거같은데 일단 내부의 toast는 모두 지워보고 다시 테스트 해보겠습니다.
제거 해도 마찬가지라면 로그를 파일로 떨궈서 로그 확인 해 보세요.
https://stackoverflow.com/questions/1756296/android-writing-logs-to-text-file
...