2015-09-18 21 views
1

我使用的是swiperefreshlayout android.support.v4.widget.SwipeRefreshLayout,并使用rxjava每次刷卡发生时查询服务器。我的代码是像下面,我要创建重复观察到的和用户的OnRefreshListener内为他们被调用,它看起来相当糟糕,由于代码重复。如果我使用原有的(外声明),那么该用户从未返回(无onNextonErroronCompleted触发)。在这种情况下,我在RxJava中错过了什么?RX-机器人(或rxjava)与refreshlayout

Subscriber<ListVerifyResponseWrapper> subscriber = new Subscriber<ListVerifyResponseWrapper>() { 
      @Override 
      public void onCompleted() { 
       LogUtils.LOGD(TAG, "completed"); 
      } 

      @Override 
      public void onError(Throwable e) { 
       Toast.makeText(getActivity(), getString(R.string.An_error_has_occured), Toast.LENGTH_SHORT).show(); 
       mSwipeRefreshLayout.setRefreshing(false); 
      } 

      @Override 
      public void onNext(ListVerifyResponseWrapper listVerifyResponseWrapper) { 
       changeViewStateAccordingToResult(listVerifyResponseWrapper); 

      } 
     }; 


     mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       Observable<ListVerifyResponseWrapper> observableDuplicate = RestClient.getInstance().getRestApi().getListVerifyRequestDetail(model); 

       final Subscriber<ListVerifyResponseWrapper> subscriberDuplicate = new Subscriber<ListVerifyResponseWrapper>() { 
        @Override 
        public void onCompleted() { 
         LogUtils.LOGD(TAG, "completed"); 
        } 

        @Override 
        public void onError(Throwable e) { 
         Toast.makeText(getActivity(), getString(R.string.An_error_has_occured), Toast.LENGTH_SHORT).show(); 
         mSwipeRefreshLayout.setRefreshing(false); 

        } 

        @Override 
        public void onNext(ListVerifyResponseWrapper listVerifyResponseWrapper) { 
         changeViewStateAccordingToResult(listVerifyResponseWrapper); 

        } 
       }; 

       observableDuplicate.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.newThread()).subscribe(subscriberDuplicate); 
      } 
     }); 

     observable.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.newThread()).subscribe(subscriber); 

感谢

回答

1

我有完全相同的问题。我由最终用户之前正确链接

.observeOn(AndroidSchedulers.mainThread()) 

解决它。显然,你必须确保有关UI的东西是UI线程

0

Johnnycube的回答(这是正确的)的顶部上完成的,我建议你使用

subscribeOn(Schedulers.io()) 

这意味着处理回调等等。