2014-11-12 3 views
0

Ion을 사용하여 요청을 처리 한 다음 onCompleted 콜백을 사용하여 응답을 처리합니다.Ion의 완료 콜백 내에서 앱이 종료 됨

내 문제는 앱이이 콜백 내부의 작업을 완료하기 전에 완전히 정지된다는 것입니다. 오류가 발생하지 않고 오류도 없습니다. 그냥 얼뿐입니다.

디버깅 할 때 코드가 고정 된 후 다음 코드 행을 실행하지 않습니다. 내 handleResponse 메서드 내에서 모든 코드를 제거하려고했지만 다른 지점에서 여전히 고정되어 있습니다. 여기

는 (아니지만 정확한 코드) 내 코드의 관련 부분은 다음과 같습니다

private void performSync() { 
    Ion.with(mContext.get()) 
     .load(API_URL) 
     .setHeader("Content-Type", "application/json") 
     .setStringBody(json) 
     .asString() 
     .setCallback(new FutureCallback<String>() { 
      @Override 
      public void onCompleted(Exception e, String result) { 
       // Some code to map response. 
       ... 

       // Freezes inside this method. 
       handleResponse(myResponse); 

       // Freezes here if I remove the above code. 
       myService.sendBroadcast(MY_ACTION); 
      } 
     }); 
} 

private void handleResponse(Object myResponse) { 
    // Do something with my response (extract a list from it). 
    ... 

    // Process data. 
    for (Object object : listFromResponse) { 
     // Do stuff with the objects. Works fine until the very last object. 
    } 

    // Freezes before this line. It never gets here. 
    PreferenceUtils.saveStringPreference(MY_PREFERENCE, someValue); 
} 

나는 부정확 한 코드에 대한 미안 해요, 내가 진짜를 게시 할 수 없습니다. 그러나 실제 코드는 위와 같은 구조를 따르므로 사람들에게 아이디어를 제공해야합니다.

이 문제를 파악하는 데 어려움을 겪고 있습니다. 스레딩 문제인 것처럼 보이지만 이온은 비동기 적으로 작동하기 때문에 앱을 정지시키지 않아야합니다.

답변

1

앱이 Ion이 아닌 코드 (콜백)에서 멈추고 있습니다. 내가하는 일을 잘 모르겠지만 디버거의 메소드를 통해 단계를 밟아 정확히 무엇이 매달려 있는지 알아보십시오.

동결이 중지 될 때까지 코드에 주석을 달아보십시오. 그것은 아마도 문제의 라인을 찾는 가장 쉬운 방법 일 것입니다.

+0

당신 말이 맞아요, 그것이 콜백 이었다는 것이 밝혀졌습니다. 모든 코드를 새 스레드에 넣으면 이제 작동합니다. 나는 이것을 처음부터하지 않았기 때문에 약간 바보 같다. 도와 주셔서 감사합니다. –