切换android中的ClassCastException

时间:2017-08-18 08:54:40

标签: android switch-statement classcastexception

我在此代码中进行切换时收到ClassCastException错误:

private void performLogin(String email, String pass, String version, String platform) {
        if (viewIsAttached()) {
            getView().showProgress();

            modelLogin.login(email, pass, version, platform, new OnStateChangeListener() {
                @Override
                public void onCompleted() {
                    if (viewIsAttached()) getView().hideProgress();
                }

                @Override
                public void onError(ApiError error) {
                    if (viewIsAttached()) {
                        switch (error.getCode()){  //ERROR IN THIS LINE
                            case 418: //UPDATE
                                getView().openUpdateDialog();
                                break;
                            case HTTP_BAD_REQUEST:
                                getView().showInvalidUserError();
                                break;
                            default:
                                getView().showErrorGeneral();
                                break;
                        }
                    }
                }

                @Override
                public void onSuccess(ResponseLogin data) {
                    //go to home
                }
            });
        }
    }

不幸的是,我无法重现的错误,但在Fabric中我在几个设备中收到此错误,我无法弄清楚原因。

com.omnidoctor.omniapp.screens.login.LoginPresenter$1.onError (LoginPresenter.java:103)

com.omnidoctor.omniapp.screens.login.LoginModel$1.onError (LoginModel.java:45)

rx.observers.SafeSubscriber._onError (SafeSubscriber.java:153)

rx.observers.SafeSubscriber.onError (SafeSubscriber.java:115)

rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.checkTerminated (OperatorObserveOn.java:273)

rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call (OperatorObserveOn.java:216)

rx.android.schedulers.LooperScheduler$ScheduledAction.run (LooperScheduler.java:107)

android.os.Handler.handleCallback (Handler.java:739)

com.android.internal.os.ZygoteInit.main (ZygoteInit.java:740)

这是我遇到的错误,发生的行是

  

switch(error.getCode())

更新:

ApiError类:

public class ApiError extends Throwable {

    private final Throwable error;

    public ApiError(Throwable e) {
        super(e);
        this.error = e;
    }

    public boolean isAuthFailure() {
        return error instanceof HttpException && ((HttpException) error).code() == HTTP_UNAUTHORIZED;
    }

    public boolean isUserInvalid() {
        return error instanceof HttpException && ((HttpException) error).code() == HTTP_BAD_REQUEST;
    }

    public boolean appShouldUpdate() {
        return error instanceof HttpException && ((HttpException) error).code() == 418;
    }

    public boolean isResponseNull() {
        return error instanceof HttpException && ((HttpException) error).response() == null;
    }

    public int getCode(){
        return ((HttpException) error).code();
    }
}

0 个答案:

没有答案