2013-10-25 2 views
12

나중에 LoaderManager를 통해 조각에서 사용하는 AsyncTaskLoader를 확장하려고합니다. 비동기 작업 중에 발생하는 오류를 처리 할 수있는 방법이 있습니까? 인터넷 연결 오류가 발생하면 사용자에게 취소 또는 재시도를 요청하는 팝업 메시지를 표시하고 싶습니다.사용자 정의 AsyncTaskLoader에서 오류를 처리하는 방법은 무엇입니까?

내가 생각할 수있는 유일한 방법은 Loader가 오류시 null을 반환하도록하거나로드 된 객체를 상태 코드가있는 다른 객체로 줄이는 것입니다.

+0

어디서나이 항목을 가져 본 적이 있습니까? 나는 이제 AsyncTask's'' doInBackground'의 반환 값을 더 이상 확인하지 않아도 같은 문제가 발생합니다. – theblang

+0

for3st 답을 사용하고 있습니다. – Malachiasz

답변

16

우리가 우리의 마지막 프로젝트에 무슨 짓을 : 일반적이고이 같은 excpetion 보유 래퍼 만들기 : 당신의 doInBackground(...)의 모든 예외

public class AsyncTaskResult<T> { 
    private final T result; 
    private final Exception error; 
    //getter & setter 
} 

캐치하고 그 결과 래퍼 (또는 결과의 경우로 팩 오류 없음). UI에서 래퍼가 예외인지 확인한 다음 오류 메시지에 따라 표시하고, 그렇지 않으면 필드에 결과를 채 웁니다.

우리에게 예외 유형을 정의하는 것도 좋은 습관입니다 (예 : 사용자가 기본 메뉴로 이동할 필요가있는 대화 상자 또는 앱 오류 만 표시하는 복구 가능한 오류 예외) (asynctask에서 특정 클래스를 잡는 것에 만) 이러한 종류를 던지기 때문에, 수백 가지의 다른 예외를 신경 쓰지 않아도되고 오류 처리를 추상화 할 수 있습니다. 또한 문자열 키에 올바른 I18n 오류 메시지를 제공하면 쓰기 만 가능합니다. e.getMessage()

+0

똑같은 일을했습니다. –

+0

"MyLoader extends AsyncTaskLoader >"모든 데이터가 'Parcelable'을 구현하면 'Bundle'을 사용하여 오류 키를 사용할 수도 있습니다. . –

+0

관련 읽기 : http://tech.puredanger.com/2010/03/31/do-we-want-a-java-util-pair/ – for3st

1

페이로드 (있는 경우) 및 상태 코드가 포함 된 복합 개체를 반환 할 때 좋은 결과를 얻었습니다. AsyncTaskLoader을 호스팅하는 Fragment은 적절하고 유익한 오류를 표시 할 수 있습니다. 이 접근법은 내장 된 로더 수명주기를 사용한다는 장점이 있습니다.

또 다른 옵션은 오류가 발생할 때 AsyncTaskLoader이 알리는 리스너를 등록하는 것입니다. Facebook SDK에는 로더에서 오류 리스너를 사용하는 예가 있습니다.

관련 문제