2013-12-16 27 views
0

我在Gwt中發現了這個非常奇怪的行爲。爲什麼私有內部類中的變量無法獲取Gwt中AsynCallback方法中具有值的私有變量的值?

我有一個簡單的TestPresenter.java有2個按鈕。按鈕1從DB獲取數據並通過Asyncallback方法返回值。按鈕2將從私有內部類中檢索該值。現在

private String test1; 
private String test2; 
private AsyncCallback<GetArticleResult> getArticleCallback=new AsyncCallback<GetArticleResult>(){ 
@Override 
     public void onFailure(Throwable caught) { 
      // TODO Auto-generated method stub 
      loadingPresenter.hide(); 
     } 

     @Override 
     public void onSuccess(GetArticleResult result) { 
      test1=result.getVal(); 
      test2="123"; 

     } 
}; 
private class InlineHTMLContextMenuHandler implements ContextMenuHandler { 



     @Override 
     public void onContextMenu(ContextMenuEvent event) { 
      System.out.println(test1); 
      System.out.println(test2); 
     } 
} 

,我按一下按鈕1第一&它從數據庫中獲取數據,然後我按一下按鈕2.然後我得到的輸出:test1=Null; test2="123";調試時的test1節目真正的價值,而不是null。對於test1變量,如果我通常從方法訪問它,那麼它會很好,但如果從私有內部類訪問它,那麼我無法獲得它的價值。

有什麼不對?這太奇怪了?

+1

什麼版本的GWT您使用的是?如果不是最新的,請嘗試升級。爲我解決了過去的一些問題。另外,如果不調試,您確定result.getVal()不爲null嗎?只需確保在onSuccess中放入println。 – geert3

+0

我正在使用GwtP 2.4或2.5記不住 – Tum

+0

是的,我確定它會返回一個值 – Tum

回答

1

我做了GWT 2.5.1測試,問題沒有發生。很可能你的問題在類GetArticleResult中。

這裏是我使用的代碼:

private String test1 = null; 
private String test2 = null; 

private AsyncCallback<GetArticleResult> callback = new AsyncCallback<GetArticleResult>() { 
    @Override 
    public void onFailure(Throwable throwable) { 
     Window.alert(throwable.getClass().getName() + " - " + throwable.getMessage()); 
    } 

    @Override 
    public void onSuccess(GetArticleResult s) { 
     test1 = s.msg; 
     test2 = "123"; 
     Window.alert(test1 + " - " + test2); 
    } 
}; 

private class MyValueChangeHandler implements ValueChangeHandler<String> { 
    @Override 
    public void onValueChange(ValueChangeEvent<String> stringValueChangeEvent) { 
     Window.alert(test1 + " - " + test2); 
    } 
} 

而且我GetArticleResult很簡單:

public class GetArticleResult implements IsSerializable { 

    public String msg; 
} 
+0

謝謝,我現在知道,我的代碼錯誤的餘弦,我用相同的方法多次調用ansyn,所以第二次調用覆蓋值 – Tum

+0

然後,您可以取消掛起的請求(com.google.gwt.http.client.Request .cancel),所以他們在完成時不會調用成功。 –

相關問題