2016-12-28 4 views
0

AsyncTask에서 @Subscribe을 보내 주려고합니다. 나는 Otto 기술 문서를 읽었으며 온라인으로 여러 기사를 읽었을뿐만 아니라 스택에 관해 많은 기사를 읽었으며 그 중 아무 것도 내 문제를 해결하는 데 도움이되지 않는 것 같습니다.Otto.Bus Post 및 @subscribe 사용 중

AsynTask는 완벽하게 호출되며 내 로그에 기록되며 게시 요청에서 응답을받을 수도 있습니다. 또한 나는 다른 질문 및 기술 문서에서 보았 듯이 ototo를 등록하고 등록을 취소하고 있습니다.

나는 SignupActivity에서 해당 PARAMS를 전달하여 내 작업을 실행 :

new SignupTask(SignupActivity.this, 
           (questionPosition + 1), 
           response.getEditText().getText().toString(), 
           FirstName.getEditText().getText().toString(), 
           LastName.getEditText().getText().toString(), 
           Mail.getEditText().getText().toString(), 
           Pass.getEditText().getText().toString(), 
           "0.0.0.0").execute(); 

내 SignupTask 다음 비동기 호출한다 : 내가 처리 할 방법을 가지고있는 SignupActivity에 지금

@Override 
public Integer call() throws Exception { 
    android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND); 
    client.getAPIInterface().SignUp(new TaskRequests.SignUpRequest(firstNameString, 
      lastNameString, 
      email, 
      pass, 
      pass),new Callback<String>() { 
     @Override 
     public void success(String msg, Response response) { 
      SignupResponse resp = new SignupResponse(); 
      resp.setMsg(msg); 
      OttoBusSingleton.getInstance().post(resp); 
     } 

을 @Subscribe를 통해 오토와 함께 :

@Subscribe 
public void onSignUpSuccess(SignupResponse event) { 
    loading.dismiss(); 

    if(!BuildConfig.DEBUG_MODE) { 
     Log.i(TAG, "!BuildConfig.DEBUG_MODE : " + AnswersAnalytics.SIGN_UP_PATIENT); 
     Answers.getInstance().logCustom(new CustomEvent(AnswersAnalytics.SIGN_UP)); 
    } 

    Toast.makeText(this, 
      event.getMsg(), 
      Toast.LENGTH_LONG).show(); 
    this.finish(); 
} 

여기에서 나는 Otto 콜백은 SignupActivity에서 성공을 처리하며 중단 점을 배치 할 때 절대 적중되지 않습니다.

수입이 제대로되어 있는지 확인했으며 가능한 해결책을 찾지 못했습니다.

답변

1

이벤트를 받으려면 클래스 인스턴스 이 버스에 등록해야합니다.

당신은 (from the sample를 촬영) 활동에 다음 코드와 같이 다음과 같은 무언가를 추가해야

... 
@Override 
protected void onResume() { 
super.onResume(); 

    // Register ourselves so that we can provide the initial value. 
    BusProvider.getInstance().register(this); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 

    // Always unregister when an object no longer should be on the bus. 
    BusProvider.getInstance().unregister(this); 
} 
... 

유의하시기 바랍니다 당신이 onCreate()에서 버스를 등록하고 onDestroy()에 등록 취소 시도 할 필요가있다. 이것은 활동이 비활성 인 경우 onPause()이 호출되기 때문입니다. 그래서 우연히 버스 등록을 취소 할 것입니다.

+0

onStart 내가 등록한 것처럼 : otto.register (this); 일부 등록을 해본 후 – Keeano

+1

Btw 등록을 취소하고 Otto 대신 EventBus를 사용해보십시오. 왜냐하면 오토는 더 이상 사용되지 않기 때문입니다. –

+1

아마도'new Bus (ThreadEnforcer.MAIN);'을 사용할 필요가있을 것입니다. AsyncTask에서 이벤트를 보낼 때 이벤트가 UI 스레드가 아닌 다른 스레드에 있기 때문입니다. –