-1

public Details getDetails(String id) throws InvokerException { Details details = new Details();

try {

    URL url = new URL(BaseUrl, "/cxf/query/ask?id=" + id);
    LOGGER.trace("URL: {}", url);

    String xml = queryStore(url);
    LOGGER.trace("Query result: {}", xml);

    details = new Details();
    InputSrc source = new InputSrc(new StringReader(xml));
        ResultsContentHandler handler = new ResultsContentHandler();

    XMLReader reader = XMLReaderFactory.createXMLReader();
    reader.setContentHandler(handler);
    reader.parse(source);

    for (Hashtable<String,String> result : handler.getResultSet()) {
        String baseId = result.get("baseId");
        ArrayList<Details> list = getHistoryDetails(baseId );

        for(Details t : list) {
        details.setStatus(t.getStatus());
        }
    }
} catch (Exception e) {
    throw new InvokerException(e);
}
return details;

}

我想要实现的是返回 Arraylist 中所有项目的详细信息。例如,我希望获得多个状态,但目前我只获得一种状态。

细节类

public class Details {
    private Core core;
    private String department;
    private GregorianCalendar timestampReceived;
    private GregorianCalendar timestampReported;
    private String status;
    private GregorianCalendar timestampStatus;
    private String explanation;

    public Details(){}

    public Details(Core core,
            String department, GregorianCalendar timestampReceived,
            GregorianCalendar timestampReported, String status,
            GregorianCalendar timestampStatus, String explanation) {
        super();
        this.core = core;
        this.department = department;
        this.timestampReceived = timestampReceived;
        this.timestampReported = timestampReported;
        this.status = status;
        this.timestampStatus = timestampStatus;
        this.explanation = explanation;
    }
    public Core getCore() {
        return core;
    }

    public String getDepartment() {
        return department;
    }
    public GregorianCalendar getTimestampReceived() {
        return timestampReceived;
    }

    public GregorianCalendar getTimestampReported() {
        return timestampReported;
    }

    public String getStatus() {
        return status;
    }

    public GregorianCalendar getTimestampStatus() {
        return timestampStatus;
    }

    public String getExplanation() {
        return explanation;
    }

    public void setCore(Core core) {
        this.core = core;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public void setTimestampReceived(GregorianCalendar timestampReceived) {
        this.timestampReceived = timestampReceived;
    }

    public void setTimestampReported(GregorianCalendar timestampReported) {
        this.timestampReported = timestampReported;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public void setTimestampStatus(GregorianCalendar timestampStatus) {
        this.timestampStatus = timestampStatus;
    }

    public void setExplanation(String explanation) {
        this.explanation = explanation;
    }


}
4

4 回答 4

1

您不能在一次调用方法中返回多个值,但是您应该返回一个 ArrayList:

public List<Details> getDetails(String id) throws InvokerException {
    List<Details> details = new ArrayList<Details>();

    try {

        URL url = new URL(BaseUrl, "/cxf/query/ask?id=" + id);
        LOGGER.trace("URL: {}", url);

        String xml = queryStore(url);
        LOGGER.trace("Query result: {}", xml);

        InputSrc source = new InputSrc(new StringReader(xml));
            ResultsContentHandler handler = new ResultsContentHandler();

        XMLReader reader = XMLReaderFactory.createXMLReader();
        reader.setContentHandler(handler);
        reader.parse(source);

        Details detail;
        for (Hashtable<String,String> result : handler.getResultSet()) {
            String baseId = result.get("baseId");
            ArrayList<Details> list = getHistoryDetails(baseId );

            for(Details t : list) {
            detail = new Details();
            detail.setStatus(t.getStatus());
            details.add(detail);
            }
        }
    } catch (Exception e) {
        throw new InvokerException(e);
    }
    return details;
}
于 2013-05-30T21:07:58.867 回答
0

创建一个ArrayList<Details>()并向其添加详细信息。之后,返回此列表。

代码:

List<Details> detailsToReturn = new ArrayList<>();

for (Hashtable<String,String> result : handler.getResultSet()) {
            String baseId = result.get("baseId");
            ArrayList<Details> list = getHistoryDetails(baseId );

            for(Details t : list) {
                Details temp = new Details();
                temp.setStatus(t.getStatus();
                detailsToReturn.add(temp);
            }
        }

return detailsToReturn;

您提供的代码非常不清楚,所以如果这不是您想要的,我建议您为我们清除它。

于 2013-05-30T21:08:21.030 回答
0

您只创建一个 Details对象(实际上是两个,但第一个被扔掉了)。如果要保留Details从 中检索到的每个对象,则每次迭代 for 循环时都ArrayList需要创建一个新对象。Details您还应该将这些添加到新的List.

当然,您可以通过简单地将ArrayList您获得的每个附加getHistoryDetails()到新列表中来节省大量工作。

于 2013-05-30T21:08:32.030 回答
0

您需要返回一个List<Details>,而不仅仅是详细信息。因此,您希望在代码示例中返回变量“list”。

于 2013-05-30T21:05:47.247 回答