У меня есть существующее приложение, в которое я добавляю функцию «Предлагаемые продукты», и у меня возникают проблемы с неправильным преобразованием ответа JSONP в типизированный JsArray.Я надеюсь, что кто-то может дать мне представление о том, что я делаю неправильно?
Я определил свой тип, который будет возвращен с сервера в своем собственном классе:
import com.google.gwt.core.client.JavaScriptObject;
public class SuggestedProduct extends JavaScriptObject {
protected SuggestedProduct() {}
public final native String getFormName();
public final native String getImageURL();
}
У меня есть метод, который использует JsonpRequestBuilder для запуска запроса на получение моего JSON.
private void loadSuggestedProducts() {
JsonpRequestBuilder builder = new JsonpRequestBuilder();
builder.requestObject(buildSuggestedProductURL(), new AsyncCallback<JsArray<SuggestedProduct>>() {
public void onFailure(Throwable caught) {
//Handle errors
}
public void onSuccess(JsArray<SuggestedProduct> data) {
if ( data == null) {
//Handle empty data
return;
}
SafeHtmlBuilder sb = new SafeHtmlBuilder();
sb.appendHtmlConstant("<h4>Suggested Products:</h4>");
for (int i=0; i < data.length(); i++) {
SuggestedProduct product = data.get(i); //<- This line throws the exception
sb.appendHtmlConstant("<div class=\"card\">");
sb.appendHtmlConstant("<img class=\"card-img-top\" src=\"" + product.getImageURL() + "\" alt=\"" + product.getFormName() + "\">");
sb.appendHtmlConstant("<div class=\"card-body\">");
sb.appendHtmlConstant("<h5 class=\"card-title\">" + product.getFormName() + "</h5>");
sb.appendHtmlConstant("<a onclick=\"javascript:addItems();\" class=\"cmd-add\">Add <i aria-hidden=\"true\" class=\"fa fa-plus-circle\"></i></a>");
sb.appendHtmlConstant("</div></div>");
}
view.getSuggestedProducts().setInnerSafeHtml(sb.toSafeHtml());
}
});
}
Когда я пытаюсь использовать Предлагаемый продукт из ответа, я получаю ошибку:
java.lang.IncompatibleClassChangeError: найден интерфейс com.google.gwt.cor.client.JsArray, но ожидался класс
Я следовал руководству в документации GWT .Я не вижу разницы между тем, что я пытаюсь, и тем, что, по их словам, сработает.Когда я отлаживаю, это выглядит так, как будто возвращенные данные являются массивом Предлагаемых продуктов, поэтому я не знаю, как действовать дальше.Любая помощь будет оценена.