Разбирать данные только когда выбрана конкретная вкладка - PullRequest
0 голосов
/ 29 ноября 2018

Я использовал вкладки на экране.Каждая вкладка имеет свои данные JSON для чтения.Поэтому я использовал метод ConnectionRequest на каждой вкладке.Следовательно, произошло то, что все методы connectionRequest выполняются одновременно, а приложение работает очень медленно.Что мне нужно, так это то, что конкретные данные json анализируются при выборе соответствующей вкладки, так что анализируется только требуемый json.Поэтому я использовал addSelectionListener, чтобы connectionRequest для анализа данных json читался только при открытии конкретной вкладки.Однако, когда экран читается сначала, отображается пустой экран.Если вкладка выбрана, то она работает.Хранение кода вне addSelectionListener заставляет запускаться все запросы соединения каждой вкладки одновременно, чего я не хочу.Как я могу решить эту проблему?

Мне нужно вернуться на определенную вкладку, когда выполняется резервное копирование с определенного экрана.Тогда эта проблема видна и там.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 голосов
/ 30 ноября 2018

Первая вкладка уже выбрана, поэтому нет события выбора.Вы должны сделать особый случай для этого.Обратите внимание, что выбор вкладок происходит часто, поэтому вам нужно кэшировать результаты.

...