Пытались ли вы использовать OkHttp3 ResponseBody для вашего звонка, и в зависимости от типа ответа либо анализируйте Json с Gson, либо выводите сообщение об ошибке?
Например, вы можете создать функцию, которая определяет, является ли строка gson следующим образом:
public static boolean isJson(String Json) {
Gson gson = new Gson();
try {
gson.fromJson(Json, Object.class);
return true;
} catch (com.google.gson.JsonSyntaxException ex) {
return false;
}
}
Тогда сделайте ваш модернизированный звонок так:
Call<ResponseBody> res = yourService.yourmethod();
res.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {
try {
String resString = response.body().string();
if (isJson(resString)) {
Gson gson = new Gson();
YourModel responseObject = gson.fromJson(resString, YourModel.class);
// do something with the object
} else { // this is not a Json so most likely your html response
// Do something else, like display an error
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
t.printStackTrace();
}
});
Если вам нужно разобрать html, чтобы отобразить возвращаемое значение, вы также можете использовать Jsoup , здесь это будет что-то вроде Document document = Jsoup.parse(resString);
, затем сделайте то, что вам нужно, с результатом.
У вас также есть возможность использовать WebView и напрямую отображать html-ответ в нем, используя webView.loadData(resString, "text/html", "UTF-8");