Я читаю статический файл JSON, используя RequestBuilde, и подтвердил, что вижу ожидаемый JSON в методе ответа .getText ().Я сократил то, что я делаю, чтобы попытаться выяснить точную проблему.Это примерно так, как я могу делать вещи.
Я использую JsonUtils.safeEval (), чтобы проанализировать ответ в моем типе наложения и передать результат в функцию, которая будет выплевывать результаты на страницу.Очевидно, что в этом методе есть что-то еще, но я для краткости оставил это.
@Override
public void onResponseReceived(Request request, Response response) {
JsArray<JSONLeadTime> tmp = JsonUtils.<JsArray<JSONLeadTime>>safeEval(response.getText());
if (200 == response.getStatusCode()) {
renderLeadTimes(tmp);
} else {
AlertWindow.displayAlert(ERRORS.GENERIC_CLIENT_ERROR);
}
}
Вот определение типа наложения, для справки.Для записи также определен тип наложения «оборудование».Вы можете почерпнуть определение из JSON ниже, или я могу включить его в случае необходимости.
public class JSONLeadTime extends JavaScriptObject {
protected JSONLeadTime() {}
public final native String getFacility() /*-{ return this.facility; }-*/;
public final native List<equipment> getEquipment() /*-{ return this.equipment; }-*/;
}
И пример анализируемого JSON:
[{
"JSONLeadTime": {
"facility": "Temperance",
"equipment": [{
"name": "Coil Line",
"value": "coil-line",
"lead-time": 2,
"sales-router-id": [76]
}]
}
}]
Когда я пытаюсьперебирайте JSArray, все нормально, пока я не попытаюсь получить доступ к методам оверлейного типа.Вот метод, который выплевывает результаты.Когда я вызываю leadTimes.get (i), я вижу, что "leadTime" - это JavaScriptObject, чего я и ожидал в этот момент.Когда я вызываю "leadTime.getFacility ()", я получаю NPE.
protected void renderLeadTimes(JsArray<JSONLeadTime> leadTimes) {
SafeHtmlBuilder sb = new SafeHtmlBuilder();
for (int i=0; i < leadTimes.length(); i++) {
JSONLeadTime leadTime = leadTimes.get(i);
sb.appendEscaped(leadTime.getFacility()); //This is where I get the NPE
if ( leadTime.getEquipment() != null ) {
for ( int x=0; x < leadTime.getEquipment().size(); x++ ) {
equipment e = leadTime.getEquipment().get(x);
sb.appendEscaped(" - " + e.getName());
}
}
}
view.getDivLeadTimes().setInnerSafeHtml(sb.toSafeHtml());
}
Я в полном недоумении.Я понятия не имею, почему это не работает.Все, что я прочитал, говорит, что это должно работать.Будем благодарны за любые идеи, которые стоит попробовать.