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");
}
};
}
}