@Override
 public void onError(Throwable e) {
   e.printStackTrace();
   if (e instanceof HttpException) {
     HttpException httpException = (HttpException) e;
     // httpException.response().errorBody().string()
     int code = httpException.code();
     String msg = httpException.getMessage();
     if (code == 504) {
       msg = "网络不给力";
     }
     apiCallback.onFailure(code, msg);
   } else {
     apiCallback.onFailure(0, e.getMessage());
   }
   apiCallback.onCompleted();
 }
  @SuppressWarnings("unchecked")
  protected void runAsAPIRateLimitsPermit(ApiCallback cb) throws Exception {
    synchronized (this.apiPermitGuard) {
      while (waitUntilPullAvailable()) {
        if (logger.isDebugEnabled()) {
          logger.debug("have room to make an API request now");
        }

        cb.run(this, twitter);
      }
    }
  }
 @Override
 public void onNext(T t) {
   apiCallback.onSuccess(t);
 }
 @Override
 public void onCompleted() {
   apiCallback.onCompleted();
 }