2011-04-11 5 views
0

Monodroid에서 비동기 적으로 웹 서비스를 호출 할 때 문제가 있습니다. 호출이 올바르게 작동하는 것 같지만 응답을 처리 할 때마다 응용 프로그램이 충돌합니다. 내가 에뮬레이터에서 실행할 때와 프로그램을 휴대 전화 (Samsung Galaxy S w 2.2.1 FROYO.XWJS8)에서 실행할 때 프로그램이 다르게 작동합니다. 쓰레드를 혼자서 만들 생각이지만 문제가 해결되는지 모르겠습니다. Windows Phone 7 응용 프로그램에서 사용하면 동일한 코드가 제대로 작동합니다.사용자 지정 목록 어댑터에서 비동기 웹 서비스 호출

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); 
} 

이를 :

private void callws(string _input) 
{ 
    MessageBox.GetInstance().ShowMessage("Search async started, input: " + _input); 
    m_waitingrequest = new RequestStatus() { Waiting = true, NewestInput = _input, OriginalInput = _input }; 
    connectormobile.UserInformation ui = new connectormobile.UserInformation() 
     { UserName = m_appsettings.GetValue<string>(AppSettings.WS_USERNAME_NAME), Password = m_appsettings.GetValue<string>(AppSettings.WS_PASSWORD_NAME) }; 
    MessageBox.GetInstance().ShowMessage("Username: " + ui.UserName + " Password: " + ui.Password); 
    m_client.SearchAsync(ui, _input); 
    MessageBox.GetInstance().ShowMessage("After search async call, input: " + _input); 
} 

검색 비동기 결과 기능은 시작 :

비동기 메서드 호출 코드는 (실제로 ShowMessage 호출 Android.Util.Log.Debug 쓰기 주)입니다 프로그램이 다르게 작동하는 곳입니다. 에뮬레이터에서는 코드가 SearchCompleted의 첫 번째 행에 도달하지 않습니다. 그러나 내 전화에서 SearchCompleted 함수는 (적어도 모든 디버그 라인은 트레이스에 있음) 보이지만 그 후에는 사용자 인터페이스가 멈 춥니 다. (분 후에 프로세스가 응답하지 않는다고 말합니다)

+0

나는 우리가 더이를 진단하는 완전한 테스트 케이스를해야합니다 생각합니다. 완전한 자체 테스트 응용 프로그램으로 http://mono-android.net/Support를 통해 버그를 신고 할 수 있습니까? 감사. – jonp

답변

0

UI 스레드 대신 백그라운드 스레드에서 UI를 수정하려고 할 가능성이 큽니다. 올바른 스레드에서 UI 로직을 수행하는 RunOnUIThread()를 사용하여

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

+0

도움이되지 않았습니다. 내가 사용자 인터페이스에하고있는 유일한 일은 어댑터를 호출하는 것입니다. m_context.RunOnUiThread (() => this.NotifyDataSetChanged()); –

+0

그러나 응용 프로그램 코드에서이 행에 도달하지 못했습니다. –

관련 문제