仅当选择了特定选项卡时才解析数据

时间:2018-11-29 05:21:48

标签: codenameone

我在屏幕上使用过标签页。每个选项卡都有其自己的json数据要读取。因此,我在每个选项卡中都使用了ConnectionRequest方法。因此,发生的事情是所有connectionRequest方法都立即运行,并且应用程序运行缓慢。我需要的是,当选择了各个选项卡时,将解析特定的json数据,以便仅解析所需的json。因此,我使用了addSelectionListener,以便仅在打开特定选项卡时才读取用于解析json数据的connectionRequest。但是,当首先读取屏幕时,将显示空白屏幕。如果选择了选项卡,那么它将起作用。通过将代码保留在addSelectionListener之外,可以使每个选项卡的所有connectionRequests一次运行,这是我不希望的。我该如何解决这个问题?

从特定屏幕备份时,我还需要返回特定标签。然后在这里也可以看到这个问题。 ConnectionRequest无法运行。

Tabs tabs = new Tabs(Component.BOTTOM);
tabs.addTab("Home", calendarIcon, homeContainer);
tabs.addTab("Book", calendarIcon3, quickBookingContainer);
tabs.addTab("Servicing", calendarIcon1, servicingContainer);
tabs.addTab("History", calendarIcon2, serviceHistoryContainer);

add(BorderLayout.CENTER, tabs);

tabs.addSelectionListener((int oldSelected, int newSelected) -> {
    if (newSelected == 0) {
        //connectionRequest for parsing json data
        homeContainerRequest(homeContainer, res);
    } else if (newSelected == 1) {
        quickBookingContainerRequest(quickBookingContainer, res);
    } else if (newSelected == 2) {
        serviceRequest(serviceContainer, res);
    } else if (newSelected == 3) {
        serviceHistoryRequest(serviceHistoryContainer, res);
    } 
});


public void homeContainerRequest(Container homeContainer, Resources res){
    ConnectionRequest con = new ConnectionRequest(url, false) {

        @Override
        protected void readResponse(InputStream input) throws IOException {
            JSONParser jp = new JSONParser();
            Map parser = jp.parseJSON(new InputStreamReader(input));
            _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
            _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
        }
    };
    con.setFailSilently(true);
    con.addRequestHeader("accept", "application/json");
    NetworkManager.getInstance().addToQueue(con);
}

public void quickBookingContainerRequest(Container quickBookingContainer, Resources res){
    ConnectionRequest con = new ConnectionRequest(url1, false) {

        @Override
        protected void readResponse(InputStream input) throws IOException {
            JSONParser jp = new JSONParser();
            Map parser = jp.parseJSON(new InputStreamReader(input));
            _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
            _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
        }
    };
    con.setFailSilently(true);
    con.addRequestHeader("accept", "application/json");
    NetworkManager.getInstance().addToQueue(con);
}

public void serviceHistoryRequest(Container serviceHistoryContainer, Resources res){
    ConnectionRequest con = new ConnectionRequest(url2, false) {

        @Override
        protected void readResponse(InputStream input) throws IOException {
            JSONParser jp = new JSONParser();
            Map parser = jp.parseJSON(new InputStreamReader(input));
            _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
            _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
        }
    };
    con.setFailSilently(true);
    con.addRequestHeader("accept", "application/json");
    NetworkManager.getInstance().addToQueue(con);
}

1 个答案:

答案 0 :(得分:0)

第一个标签已被选中,因此没有选择事件。您需要为此设置特殊情况。请注意,选项卡选择经常发生,因此您需要缓存结果。