0

I have the following json structure for successful response.

{
  "status": "Successful",
  "data": [
    {
      "A": "apple",
      "B": "Bat",
      
      "Colors": [
        { "G": "gold"},
        {"P": "pink"}
    }],
  "message": "Action was successful"
}


and for what I might refer to as a successful failure response below

{
    "status": "Successful",
    "data": {
        "message": "Error retrieving list",
        "code": "3000",
        "status": "nok"
    },
    "message": "Action was successful"
}

The response code is 200 for both response and the POJO class for the main list is totally different when I get the second response. That is why I get this error"Expected BEGIN_ARRAY but was BEGIN_OBJECT" How can I handle this so I can display an error toast message in onError() method? I am using RxJava and Retrofit with MVP architecture. Here is the Interactor.


public class EventListInteractor {

    private  EventListContract.EventListener eventListener;
   

    public EventListInteractor(EventListContract.EventListener eventListener){
        this.eventListener = eventListener;
    }

    public void listEvents_(Context context, String header, EventRequest eventRequest){
        listEventsObserver(header,eventRequest).subscribeWith(listEventsObservable(context));
    }

    public Observable<EventResponseModel> listEventsObserver(String header, EventRequest eventRequest){

        return RetrofitInstance.getRetrofitInstance().create(NetworkService.class)
                .listEvents("Token" + header, eventRequest)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread());
//
    }

    public DisposableObserver<EventResponseModel> listEventsObservable(final Context context){
        return new DisposableObserver<EventResponseModel>(){

            @Override
            public void onNext(EventResponseModel eventResponseModel) {
                if(eventResponseModel.getStatus().equalsIgnoreCase("Successful")){

                    eventListener.onEventListSuccess(context, eventResponseModel);

                }else {
                    eventListener.onFailure("Error");
                }
            }

            @Override


            public void onError(Throwable e) {
                Log.d(EVENT_LIST, "Error" + e);

                if(e instanceof HttpException){
                    if (((HttpException) e).response().code() != 200){
                        e.getMessage();
                        eventListener.onFailure("Unable to connect to. Please try again later");

                    }

                }
                e.printStackTrace();


            }

            @Override
            public void onComplete() {
                Log.d("LIST", "Completed");
            }
        };
    }

}
chigirl
  • 69
  • 8

0 Answers0