【问题标题】:GWT for cycle is not cycling循环的 GWT 不循环
【发布时间】:2013-03-26 10:00:25
【问题描述】:

我正在开发一个 GWT 应用程序并且我有这个方法:

    private static List<Ticket> getTicketsFromJSON(String ticketsJSONString) {
    JSONValue ticketsArrayValue = JSONParser.parseLenient(ticketsJSONString);
    JSONArray ticketsArray = ticketsArrayValue.isArray();
    List<Ticket> ticketsList = new LinkedList<Ticket>();

    for (int i = 0; i < ticketsArray.size(); i++) {

        JSONObject ticketJSON = ticketsArray.get(i).isObject();
        Ticket ticket = new Ticket((int)ticketJSON.get("id").isNumber().doubleValue(), 
                ticketJSON.get("name").isString().stringValue(),
                ticketJSON.get("description").isString().stringValue(),
                (int)ticketJSON.get("complexity").isNumber().doubleValue(),
                (int)ticketJSON.get("priority").isNumber().doubleValue(),
                (long)ticketJSON.get("started").isNumber().doubleValue(),
                (long)ticketJSON.get("finished").isNumber().doubleValue(),
                (long)ticketJSON.get("timespent").isNumber().doubleValue());
        ticketsList.add(ticket);
    }
    Window.alert("Out of the cicle");
    return ticketsList;
}

似乎我进入了循环,但在创建 Ticket 对象之后什么都没有发生。可能是对象甚至没有初始化。这是 Ticket 类:

    package org.kanbanizer.client.beans;

public class Ticket {
    private int id;
    private String name;
    private String description;
    private int complexity;
    private int priority;
    private long started;
    private long finished;
    private long timespent;

    public Ticket() {
    }

    public Ticket(int id, String name, String description, int complexity,
            int priority, long started, long finished, long timespent) {
        this.id = id;
        this.name = name;
        this.description = description;
        this.complexity = complexity;
        this.priority = priority;
        this.started = started;
        this.finished = finished;
        this.timespent = timespent;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public int getComplexity() {
        return complexity;
    }

    public void setComplexity(int complexity) {
        this.complexity = complexity;
    }

    public int getPriority() {
        return priority;
    }

    public void setPriority(int priority) {
        this.priority = priority;
    }

    public long getStarted() {
        return started;
    }

    public void setStarted(long started) {
        this.started = started;
    }

    public long getFinished() {
        return finished;
    }

    public void setFinished(long finished) {
        this.finished = finished;
    }

    public long getTimespent() {
        return timespent;
    }

    public void setTimespent(long timespent) {
        this.timespent = timespent;
    }

}

我尝试使用和 Integer.parseInt 来获取值,但结果是一样的。作为方法参数的字符串不为空。如果有人知道为什么它不起作用,请告诉我。

【问题讨论】:

  • 您还应该发布正在读取的 JSON 数据的示例,例如 ticketsJSONString 的内容

标签: java json gwt for-loop


【解决方案1】:

我猜你的代码在你的 JSON 获取值上崩溃了,例如(int)ticketJSON.get("complexity").isNumber()

如果这些值为 null 或缺失会怎样?您的代码将因空指针异常而崩溃 - NPE。

添加一些行来检查 NPE。

不过,一般来说,您可能会考虑使用 JavaSsript 覆盖类型来处理这类事情。您可以为工单创建一个覆盖而不是复制每个值:http://googlewebtoolkit.blogspot.ca/2008/08/getting-to-really-know-gwt-part-2.html

【讨论】:

  • 使用覆盖类型是比这种极其复杂的 JSON 解析更好的解决方案......我经常使用它们,它们工作得很好!
  • 一切都很好,但是没有空值,逻辑上说代码应该可以正常工作,但实际上不是,它甚至没有完成一个循环。 ..
  • 是的,它可能在某个地方崩溃了。要么使用 Eclipse 逐步完成它,要么将代码分开并放入 println 或 Window.alert 消息,然后查看它在哪一行死掉。
猜你喜欢
  • 2016-04-24
  • 2020-02-19
  • 1970-01-01
  • 2020-01-27
  • 2023-03-10
  • 2011-12-03
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多