gregor is right, you are trying to perform your update synchronously but your request is happening asynchronously.
A full explanation of your exact problem can be found in this post: http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/faca1575f306ba0f/3be719c021aa19bd -jason On Feb 6, 2009, at 6:10 AM, gregor wrote: > > Your problem looks like it's here: > > private void updateGrid1(GridPanel gridPanel, int cols, int rows) { > if (store != null) { > store.removeAll(); > } > getData1(1); <<<<<<<<<<<< PROBLEM > > Object[][] data = null; > > if(displayData1!= null) { <<<<<<<<<PRBLEM: displayData not > yet updated!!!!!!!! > data = getCompanyData(displayData1, 1); > } > else { > System.out.println("exception at update1();"); > return; > } > > caused by: > > // success > public void onSuccess(Object result) { > // Cast the result into the object that was sent > // This casts the random object into DataContainer > // Since the object is an array we use [] > displayData1 = (DataContainer[]) result; <<<<<<<< CAUSE: > you set variable, you do not call grid update method > > } > }; > > > what you need to do is rearrange your logic to call updateGrid1(..) > from the async callback onSuccess(..) method. What is happening at the > moment is that the grid update code is running at the same time the > RPC call is executing over the wire, so ther is no new data in > displayData1. > > regards > gregor > > > On Feb 6, 12:33 pm, ytbryan <ytbr...@gmail.com> wrote: >> can someone help? >> >> below are my rpc request code. >> >> private void getData() { >> >> AsyncCallback<Object> callback = new AsyncCallback<Object>() { >> // fail >> public void onFailure(Throwable ex) { >> RootPanel.get().add(new HTML(ex.toString())); >> } >> // success >> public void onSuccess(Object result) { >> // Cast the result into the object that was sent >> // This casts the random object into DataContainer >> // Since the object is an array we use [] >> DataContainer[] displayData = (DataContainer[]) result; >> } >> }; >> >> callProvider.getData(callback); >> } >> private void getData1() { >> final int value1 = value; >> >> AsyncCallback<Object> callback1 = new >> AsyncCallback<Object>() >> { >> // fail >> >> public void onFailure(Throwable ex) { >> RootPanel.get().add(new HTML(ex.toString())); >> >> } >> // success >> public void onSuccess(Object result) { >> // Cast the result into the object that was sent >> // This casts the random object into DataContainer >> // Since the object is an array we use [] >> displayData1 = (DataContainer[]) result; >> >> } >> }; >> >> // remote procedure call to the server to get the data >> callProvider1.getData1(callback1); >> >> } >> >> below is updategrid1 code which calls the getData1() code >> >> private void updateGrid1(GridPanel gridPanel, int cols, int rows) { >> if (store != null) { >> store.removeAll(); >> } >> getData1(1); >> >> Object[][] data = null; >> >> if(displayData1!= null) { >> data = getCompanyData(displayData1, 1); >> } >> else { >> System.out.println("exception at update1();"); >> return; >> } >> >> RecordDef recordDef = new RecordDef( >> new FieldDef[]{ >> >> new StringFieldDef("date"), >> new IntegerFieldDef("opensource"), >> new IntegerFieldDef("trial"), >> new IntegerFieldDef("sales"), >> new StringFieldDef("ostrial"), >> new StringFieldDef("trialsale") , >> new StringFieldDef("ossale") >> } >> ); >> ColumnConfig[] columns = new ColumnConfig[]{ >> //column ID is company which is later used in >> setAutoExpandColumn >> new ColumnConfig("Date", "date", 160, true, null, >> "company"), >> new ColumnConfig("Open Source", "opensource", 35,true), >> new ColumnConfig("Trial", "trial", 45,true), >> new ColumnConfig("Sales", "sales", 65,true), >> new ColumnConfig("OS-Trial", "ostrial", 65), >> new ColumnConfig("Trial-Sale", "trialsale", 60, true), >> new ColumnConfig("OS-Sale", "ossale", 60, true) >> }; >> >> ColumnModel columnModel = new ColumnModel(columns); >> >> MemoryProxy proxy = new MemoryProxy(data); >> ArrayReader reader = new ArrayReader(recordDef); >> store = new Store(proxy, reader); >> store.load(); >> >> gridPanel.reconfigure(store, columnModel); >> >> } >> >> below is my button code which get trigger when pressed. and it has >> listener that will call updategrid1()!!! please ignore those >> unnecessary parameter that are unused. >> >> ToolbarButton generateButton1 = new ToolbarButton("test", new >> ButtonListenerAdapter() { >> public void onClick(Button button, >> EventObject e) { >> updateGrid1(gridPanel, >> cols.getValue().intValue(), >> rows.getValue().intValue()); >> } >> }); >> generateButton1.setIconCls("database-add-icon"); >> bottom.addButton(generateButton1); >> >> } >> >> can someone help! >> >> On Feb 6, 12:14 pm, ytbryan <ytbr...@gmail.com> wrote: >> >>> I just insert Window.alert("") into getdata1(); and i realised that >>> the method is called but no window alert appears. i inserted a >>> println after onsuccess and onfailure and something is printed out. >> >>> basically, onsuccess and onfailure are skipped? how is it possible? >> >>> On Feb 6, 11:58 am, ytbryan <ytbr...@gmail.com> wrote: >> >>>> below is the code where i execute the rpc request. i create >>>> getdata() >>>> and getdata1() to get execute different query. i am using two Async >>>> object to make call. i am not sure is it correct as i got error >>>> when >>>> i use one. any help/advice is welcome and appreciated. :D >> >>>> private void getData() { >> >>>> AsyncCallback<Object> callback = new AsyncCallback<Object>() { >>>> // fail >>>> public void onFailure(Throwable ex) { >>>> RootPanel.get().add(new HTML(ex.toString())); >>>> } >>>> // success >>>> public void onSuccess(Object result) { >>>> // Cast the result into the object that was sent >>>> // This casts the random object into DataContainer >>>> // Since the object is an array we use [] >>>> DataContainer[] displayData = (DataContainer[]) result; >>>> } >>>> }; >> >>>> callProvider.getData(callback); >>>> } >>>> private void getData1() { >>>> final int value1 = value; >> >>>> AsyncCallback<Object> callback1 = new >>>> AsyncCallback<Object>(){ >>>> // fail >> >>>> public void onFailure(Throwable ex) { >>>> RootPanel.get().add(new HTML(ex.toString())); >> >>>> } >>>> // success >>>> public void onSuccess(Object result) { >>>> // Cast the result into the object that was sent >>>> // This casts the random object into DataContainer >>>> // Since the object is an array we use [] >>>> displayData1 = (DataContainer[]) result; >> >>>> } >>>> }; >> >>>> // remote procedure call to the server to get the data >>>> callProvider1.getData1(callback1); >> >>>> } >> >>>> On Feb 6, 11:46 am, mon3y <darkside...@hotmail.com> wrote: >> >>>>> Hi >> >>>>> A code snippet would be nice, so we can see where you're going >>>>> wrong. >> >>>>> Also put a Window.alert(""), in your onFailure and onSuccess of >>>>> your >>>>> second call to see what you get. >> >>>>> If it comes into the onFailure of your second call, there must be >>>>> something wrong with the way you're calling the server side or >>>>> your >>>>> interfaces. >> >>>>> If it comes in on your onSuccess, it must be a logic error, or >>>>> something else pertaining to your client side code. >> >>>>> If you make the first call successful and you call the second >>>>> one the >>>>> same way(logically) then there should be no issues. >> >>>>> :) >> >>>>> On Feb 6, 12:39 pm, ytbryan <ytbr...@gmail.com> wrote: >> >>>>>> Hi all, >>>>>> i know gwt don support synchronous call and i read it somwhere >>>>>> that >>>>>> there is actually don need to make rpc call synchronous. >> >>>>>> but i created an application with buttons like " save data" >>>>>> and " >>>>>> display result "that will communicate to server by fetching >>>>>> data or >>>>>> saving data. >> >>>>>> when the application starts, it will automatically display the >>>>>> first >>>>>> result with its first rpc call. but when i click the display >>>>>> second >>>>>> result's button....... it doesn't work anymore. any subsequent >>>>>> rpc >>>>>> call after the first one don't work. >> >>>>>> what is wrong here? and what am i missing? can someone advice >>>>>> me? the >>>>>> usual rpc example online only show how to make one rpc call. is >>>>>> there >>>>>> a way to make multiple calls that do different task? thank you >>>>>> for >>>>>> your time in viewing this post. > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~----------~----~----~----~------~----~------~--~---