【问题标题】:Why I still got NetworkOnMainThreadException in spite of using @WorkerThread annotation?为什么尽管使用了 @WorkerThread 注释我仍然得到 NetworkOnMainThreadException?
【发布时间】:2016-08-12 16:05:23
【问题描述】:

我从@OnClick 打电话给sendPhoneNumberHandler,这意味着得到NetworkOnMainThreadException 是正常的。 为了处理这个问题,我使用了@WorkerThread 注释,它允许方法调用在 UI/主线程之外运行。相比之下,我还是得到了NetworkOnMainThreadException

  @WorkerThread
  public void sendPhoneNumberHandler(final Context context, String phoneNumber) {
    MonoApplication application = MonolApplication.get(phoneNumberMvpView.getContext());
    rx.Observable<HeaderResponse> checkPhoneNumber =
        application.getMonolService(Constants.monolAPIUrl).checkPhoneNumber(phoneNumber);

    subscription = checkPhoneNumber.subscribe(new Observer<HeaderResponse>() {
      @Override public void onCompleted() {
      }

      @Override public void onError(Throwable e) {
        phoneNumberMvpView.onPhoneNumberSendResult(false, 0);
      }

      @Override public void onNext(HeaderResponse s) {
        phoneNumberMvpView.onClearText();
        phoneNumberMvpView.onPhoneNumberSendResult(true, s.getError());
      }
    });
  }

有什么线索吗?

【问题讨论】:

  • 你应该把你的方法放在一个 AsyncTask 中。
  • 我错过了订阅 IO 线程 (subscribeOn(Schedulers.io()))

标签: java android networkonmainthread


【解决方案1】:

使用注解不会使该方法脱离 UI 线程。它只是表明这个方法需要在单独的线程中执行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多