0

私は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 オブジェクトの作成後は何も起こりません。オブジェクトが初期化されていない可能性があります。チケットクラスは次のとおりです。

    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 を使用して値を取得しようとしましたが、結果は同じでした。メソッドの引数である文字列が空ではありません。なぜ機能しないのか誰かが知っているなら教えてください。

4

1 に答える 1

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

于 2013-03-26T11:15:29.510 に答える