java .lang.ClassCastException: com.google.gson.internal.LinkedTreeMap нельзя привести к ClassName - PullRequest
0 голосов
/ 16 января 2020

Api, который я использовал для обработки двух откликов Api с o, используя retrofit и rx java. Я создаю модель ответа и модель ошибки. Я не знаю, как обрабатывать оба ответа в одном API, вот моя реализация

@POST("login/")
Observable<Response<Object>> login(@Body LoginParamModel model);

, так вот моя реализация API

 RetroClient.getClient(ApiEndPointInterface.URl).create(ApiEndPointInterface.class)
            .login(model).subscribeOn(Schedulers.computation())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<Response<Object>>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(Response<Object> loginDataModelResponse) {
                    mLoginDataModelResponse=loginDataModelResponse;
                }

                @Override
                public void onError(Throwable e) {
                    mLoginView.LoginError(e.getMessage());
                }

                @Override
                public void onComplete() {
                    if (mLoginDataModelResponse.code() == 200 || mLoginDataModelResponse.code() == 201) {


                        LoginDataModel loginDataModel = (LoginDataModel) mLoginDataModelResponse.body();
                        mLoginView.LoginResult(loginDataModel);
                    } else if (mLoginDataModelResponse.code() == 400) {
                        try {
                            mLoginView.LoginError(CommonUtill.JsonReader(mLoginDataModelResponse.errorBody().string()));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });

И я добился успеха, но проблема в том, Я не преобразовал класс объекта в класс модели

 LoginDataModel loginDataModel = (LoginDataModel) mLoginDataModelResponse.body();

Я получил исключение такого типа:

W: io.reactivex.exceptions.UndeliverableException: исключение не может быть доставлено потребителю потому что он уже отменил / удалил поток или исключение не было go для начала. Дополнительная информация: https://github.com/ReactiveX/RxJava/wiki/What 's-different-in-2.0 # обработка ошибок | java .lang.ClassCastException: com.google.gson.internal.LinkedTreeMap нельзя преобразовать в com.model.login.LoginDataModel

W: вызвано: java .lang.ClassCastException: com.google .gson.internal.

1 Ответ

0 голосов
/ 17 января 2020

Просто измените ApiInterface

@POST("login/")
Observable<Response<LoginDataModel>> login(@Body LoginParamModel model);
...