Ho un'app mobile che consuma un servizio API. Ho una classe per gestire tutte le operazioni (get, post, put) che lanciano eccezioni se il risultato non è 200.
L'app è stata progettata originariamente per essere prevalentemente offline, quindi i miei servizi in questo modo:
public async Task<bool> GetMailList(int idUser)
{
try
{
string uri = GlobalSettings.Instance.MailEndpoint + idUser;
List<MailDto> listaMailDto = await _requestProvider.GetAsync<List<MailDto>>(uri);
await StoreListMailToDB(MapperMail.MapMailList(listaMailDto));
return true;
}
catch (ServiceAuthenticationException ex)
{
Log.CreateErrorLog("Service.35 - ServiceAuthenticationException \n" + ex.ToString());
DependencyService.Get<IDialogs>().ShowMessage(AppResources.errorBadUser);
return false;
}
catch (HttpRequestExceptionEx ex)
{
Log.CreateErrorLog("Service.40 - HttpRequestExceptionEx \n" + ex.ToString());
DependencyService.Get<IDialogs>().ShowMessage(AppResources.errorNoConection);
return false;
}
catch(Exception ex)
{
Log.CreateErrorLog("Service.45 - Exception \n" + ex.ToString());
DependencyService.Get<IDialogs>().ShowMessage(AppResources.error);
return false;
}
}
Quindi il servizio ottiene i dati e li archivia su Sqlite. Se tutto fosse ok, ritorna vero, se no restituisco falso. E nello schermo chiamo a Sqlite per recuperare i dati.
Il problema arriva ora perché vogliamo cambiarlo in un'applicazione per lo più online. Voglio mantenere la struttura in cui i servizi gestiscono l'eccezione ricevendo i dati al termine della funzione. Voglio qualcosa di simile ma non voglio restituire null
public async Task<List<MailDto>> GetMailList(int idUser)
{
try
{
string uri = GlobalSettings.Instance.MailEndpoint + idUser;
List<MailDto> listaMailDto = await _requestProvider.GetAsync<List<MailDto>>(uri);
List<MailBo> listMappead = MapperMail.MapMailList(listaMailDto)
StoreListMailToDB(listMappead);
return listMappead;
}
catch (ServiceAuthenticationException ex)
{
Log.CreateErrorLog("Service.35 - ServiceAuthenticationException \n" + ex.ToString());
DependencyService.Get<IDialogs>().ShowMessage(AppResources.errorBadUser);
return null;
}
catch (HttpRequestExceptionEx ex)
{
Log.CreateErrorLog("Service.40 - HttpRequestExceptionEx \n" + ex.ToString());
DependencyService.Get<IDialogs>().ShowMessage(AppResources.errorNoConection);
return null;
}
catch(Exception ex)
{
Log.CreateErrorLog("Service.45 - Exception \n" + ex.ToString());
DependencyService.Get<IDialogs>().ShowMessage(AppResources.error);
return null;
}
}
Qualche idea?