2016-10-27 2 views
-2

문제, 어떻게 서버에서 예기치 않은 JSON 응답을 처리하는 오류 처리를 휴식,이 문제는 명확하게해야합니다안드로이드 주석이

ApiService 인터페이스 :

@Rest(
    converters = MappingJackson2HttpMessageConverter.class, 
    interceptors = AuthInterceptor.class, 
    responseErrorHandler = MyErrorHandler.class) 
public interface ApiService { 
    @Get("http://192.168.1.5:3000" + "/balance") 
    Balance getBalance(); 
    ... 
} 

MyErrorHandler 클래스 관련 부분

@Override 
public boolean hasError(ClientHttpResponse response) throws IOException { 
    switch (response.getStatusCode()) { 
     case OK: 
     case CREATED: 
      return false; 
     default: 
      return true; 
    } 
} 

@Override 
public void handleError(ClientHttpResponse response) throws IOException { 
    switch (response.getStatusCode()) { 
     case BAD_REQUEST: 
      Log.d(TAG, "handleError: bad request"); 
      break; 
     default: 
      Log.d(TAG, "handleError: Default"); 
      break; 
    } 
} 

MainActivity 관련 부분 (사용 장소)

@Override 
public void onResume() { 
    super.onResume(); 
    getBalance(); 
} 

@Background 
void getBalance() { 
    showBalance(apiService.getBalance()); 
} 
// show balance is accessing Balance fields and showing it on screen 

이 기능은 서버가 반환 할 내용을 반환 할 때 유용하지만, Json 파서가 응답을 구문 분석 할 수 없기 때문에 (예 : 오류 코드 400 및 Balance 클래스에없는 키를 사용하는 json을 반환합니다.) 앱이 충돌합니다.

try catch에서 showBalance()를 래핑 할 수 있지만, 다른 곳에서 ApiService의 getBalance()를 더 많이 사용하는 경우, 모든 것을 수행해야합니다. MyErrorHandler에서 응용 프로그램의 흐름을 깰 수있는 방법이 있나요이 때, 나는 ResponseErrorHandler을 사용했다

+0

'오류 처리'벨소리가 울리나요? –

+0

handleError()에서 앱이 응답을 Balance 객체로 변환하지 못하도록하려면 어떻게해야합니까, 현재 어떻게되어 있는지, 오류가 발생했는지 감지하고 여전히 json을 잔액으로 변환하려고 시도합니다. – dzingiskan

+0

아니요, 가정의 문제를 일으킬 수있는 코드를 작성해야합니다. 즉, SQL 쿼리가 실패했거나 어떤 이유로 든 HTTP 요청이 실패했습니다. 일단 당신이 그것을 얻으면, 당신은 중간 단계의 실패 때문에 당신은 그럴 준비가되기 때문에 부서지지 않을 것입니다. 이것이 당신의 접근 방식이 지금 부족한 것입니다. –

답변

0

그것을 해결 서버에서 오류 코드를 감지, RestErrorHandler로 전환이 나는 성공적으로 예외를 잡을 노력을 중지 할 수 있었다, 그것을 해결 '예기치 않은'json을 변환합니다.

문제를 제대로 설명하지 못해 죄송합니다. 누군가에게 도움이 되었기를 바랍니다.

관련 문제