2014-05-23 75 views
0

我有以下Codename用於訪問網絡資源的一個代碼。它幾乎是這個用例的Codename One教程的精確副本。CodenameOne連接請求在重複時掛起

public void executeRequest(){ 
    String url = "http://www.random.net"; 
    InfiniteProgress prog = new InfiniteProgress(); 
    final Dialog dlg = prog.showInifiniteBlocking(); 

    ConnectionRequest r = new ConnectionRequest() { 
     @Override 
     protected void postResponse() { 
       //handle changes to my form 
      } 

     @Override 
     protected void readResponse(InputStream input) 
       throws IOException { 
       //handle parsing data 
     } 

     @Override 
     protected void handleIOException(IOException err) { 
      super.handleIOException(err); 
     } 



    }; 
    r.setUrl(url); 
    r.setPost(false); 
    r.addArgument("arg", "2"); 
    r.setDuplicateSupported(true); 
    r.setDisposeOnCompletion(dlg); 
    NetworkManager.getInstance().addToQueue(r); 

} 

我第一次運行它 - 沒問題。如果我嘗試通過再次調用相同的方法來「刷新」我的數據,那麼應用程序將掛起並永遠旋轉的InfiniteProgress對話框。它幾乎像第一個網絡請求沒有真正完成,然後是第二種衝突。任何想法我做錯了什麼?

回答

0

以供將來參考,有什麼固定的這對我來說是使用

NetworkManager.getInstance()addToQueueAndWait(R)。

改爲。這清除了我的大部分問題。

0

默認情況下,對完全相同的URL的重複請求被禁用,請嘗試在連接請求上調用setDuplicatesSuppotred(true)

+1

謝謝你的建議,謝。我添加了那些代碼(反映在我上面的代碼塊中)並嘗試了它 - 結果相同。將連接請求添加到隊列後,應用程序將掛起並且ReadResponse方法永遠不會被調用。 – jg1998

+0

您是否在第一個電話完成之前發送第二個電話? 如果是這樣,它可能會完成並返回到前一個呼叫的等待對話框。 如果不是,我建議打開網絡監視器工具來查看連接出去。您也可以在調試器中運行,並在應用程序卡住時按暫停以查看各個線程的卡住位置。 –

0

我陷入了同樣的問題,沒有解決方案的工作。但是,我就是這麼做的:

final NetworkManager nm = NetworkManager.getInstance(); 
nm.setTimeout(3000); 

然後

protected void postResponse() { 
... 
    nm.shutdown(); 
} 

,並有人呼籲爲 nm.addToQueueAndWait(request);

也許是事實,NetworkManager已作出最終做了工作,但我把「關閉「只是肯定的。它對我有用