Question

I have this code:

    searchButton.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {

            statusLabel.setText("Searching...");

            final String query = searchField.getText();
            RootPanel.get("flickr").clear();
            AsyncCallback<Flickr> ac=new AsyncCallback<Flickr>(){

                @Override
                public void onFailure(Throwable caught) {

                }

                @Override
                public void onSuccess(Flickr result) {

                    for(Photo p:result.getPhotos().getPhoto())
                    {
                        flck.add(p);
                    }
                    statusLabel.setText("");
                }
            };

            mashupService.getFlickrPhotos(query, ac);

            if(!flck.isEmpty())
            {
                for(int i=0;i<flck.size();i++)
                {
                    RootPanel.get("flickr").add(new HTML("<img  src='http://farm"+flck.get(i).getFarm()+".staticflickr.com/"+flck.get(i).getServer()+"/"+flck.get(i).getId()+"_"+flck.get(i).getSecret()+".jpg'/><br/>"));

                }
            }

            }
    });

I want execute first onSuccess (have flick.add)... but it executes after of if(!flck.isEmpty)... and I need have flck with data but I can't...

When I press secont time the same button, flck have data of first onClick...

Thanks in advance

Was it helpful?

Solution

Move the code inside the onSuccess() method that is depended on the result of AsyncCallback.


It's clear from the name that AsyncCallback is just like a AJAX request that talks to server asynchronously means the execution of code is not sequential.

Just move if(!flck.isEmpty)... inside onSuccess() method.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top