2011-04-11 9 views
0

在Monodroid中異步調用Web服務時遇到問題。該調用似乎正常工作,但每當我處理響應時,應用程序都會崩潰。當我在仿真器中運行它時,程序運行方式不同,當我在手機上運行它時(Samsung Galaxy S w 2.2.1 FROYO.XWJS8)。我正在考慮自己創建線程,但不知道它是否可以解決問題。在Windows Phone 7應用程序中使用相同的代碼時可以正常工作。自定義列表適配器中的異步Web服務調用

用於異步方法調用的代碼是(注:在現實中ShowMessage調用寫Android.Util.Log.Debug):

void m_client_SearchCompleted(object sender, connectormobile.SearchCompletedEventArgs e) 
{ 
      MessageBox.GetInstance().ShowMessage("Search async completed"); 
      SearchCache.CacheElement element = new SearchCache.CacheElement(); 
      element.SearchCriteria = m_waitingrequest.OriginalInput; 
      element.PartialResponse = e.Result.PartialResponse; 

      if (e.Result.CompanyNameInfoArray == null) 
       element.Rows = new List<connectormobile.CompanyNameInfo>(); 
      else 
       element.Rows = e.Result.CompanyNameInfoArray.ToList(); 
      MessageBox.GetInstance().ShowMessage("Search async returned, partial response: " + e.Result.PartialResponse 
       + " row count: " + element.Rows.Count + " return value: " + e.Result.ReturnValue.ErrorDescriptionFi); 
} 

​​

搜索結果異步函數開始是程序行爲不同的地方。在模擬器中,代碼永遠不會到達SearchCompleted的第一行。但是在我的手機中,SearchCompleted函數似乎經歷了(至少我的所有調試行都在跟蹤中),但在此之後用戶界面凍結了。 (並在一分鐘後它說過程沒有響應)

+0

我認爲我們需要一個完整的測試用例來進一步診斷此。你可以通過http://mono-android.net/Support提供一個完整的自包含測試應用程序的錯誤嗎?謝謝。 – jonp 2011-04-14 03:22:28

回答

0

您可能試圖從後臺線程而不是UI線程修改UI。使用RunOnUIThread()做在正確的線程你的UI邏輯:

http://mono-android.net/Documentation/Guides/Writing_Responsive_Applications

+0

沒有幫助。我對用戶界面做的唯一事情就是調用Adapters m_context.RunOnUiThread(()=> this.NotifyDataSetChanged()); – 2011-04-12 15:02:32

+0

但是應用程序從未在代碼中到達過這一行。 – 2011-04-12 15:05:19