웹 서비스의 데이터를 가져온 Xamarin Android 응용 프로그램을 가지고 목록보기에 바인딩합니다.Xamarin.Android : 비동기 작업에서 처리되지 않은 예외를 throw합니다.
MainActivity.cs의 방법은 다음
내MainActivity
에서
private async Task LoadDataFromService()
{
int userId = int.Parse(applicationData[USER_ID]); // Shared prefrenced data
//ASYNC Method getting data from JSON and converting it into Sales Object
Task<IList<Sales>> apiDataTask = UserData.GetSales(userId);
IList<Sales> apiData = await apiDataTask;
if (apiData != null)
{
salesList = apiData as List<Sales>;
dbManager.Update(salesList); //Sync with SQLite DB
}
}
나는이 작업을 식별자를 제공하는 글로벌 변수를 정의
public class MainActivity : Activity
{
private Task loadData;
}
다음과 같이 그리고 나는이를 호출하고 :
public class MainActivity : Activity
{
private Task loadData;
protected override void OnCreate(Bundle bundle)
{
loadData = new Task(async() => { await LoadDataFromService(); });
}
}
그런 다음 데이터가 다운 될 때까지 기다려야합니다. ded 한 다음 데이터를 ListView
에 넣습니다.
protected override void OnStart()
{
base.OnStart();
loadData.Start(); // This is causing to generate an exception
loadData.ContinueWith(t => { BindData(); }).Wait();
}
유일한 문제 내가 무엇입니까
는 메시지가An unhandled exception occured.
말하는 unhanled 예외로 끝나는 것입니다, ONSTART 해고 후 메시지가 와서 문제가있을 수 있습니다에 대한 표시가 없습니다.
답변 해 주셔서 감사합니다. 것은 내가 만들고있는 응용 프로그램이 온라인과 오프라인 모두에서 작동한다는 것입니다. 따라서 연결을 확인하고 비동기 메소드가 실행됨을 기반으로합니다. 그런 이유로 저는 OnStart를 비동기로 만들고 싶지 않았습니다. 비동기로 만들면 오프라인에서도 동일한 방식으로 수행됩니까? – progrAmmar
@progrAmmar 예. 문제 없습니다. 오프라인에서도 비동기로 만들 수 있습니다. Async는 컴파일러에게 알리고 아무 것도하지 않습니다. 멀리 귀하의 방법에 도달 기다리고있다 그것은 동기화를 수행하고 아무것도 비동기를 실행합니다. wait는 메소드를 비동기로 만듭니다. 따라서 대기 상태 인 경우 비동기 표시된 메소드 동기화를 쉽게 실행할 수 있습니다. – Sebi