【问题标题】:Validate internet connection or Azure service - Xamarin验证 Internet 连接或 Azure 服务 - Xamarin
【发布时间】:2017-06-12 18:44:31
【问题描述】:

我有一个使用 Xamarin(跨平台)开发的应用程序,现在运行良好!!但总是需要互联网连接。 如果互联网连接失败,我的应用程序会意外关闭。我想控制这个。 首先我有“AzureDataService”类:

public class AzureDataService 
{ 
    //Conexion to backend  
    public MobileServiceClient MobileService { get; set; } 

    //Object of "Ficha" class.  
    IMobileServiceSyncTable<Ficha> tablaFicha; 

    public async Task Initialize() 
    {
        if (isInitialized) 
            return;
        MobileService = new MobileServiceClient("http://linkbdd");

        //Save data in a local DB, later upload with internet connection
        const string path = "bbddMuestra.db";

        var store = new MobileServiceSQLiteStore(path);//Create DB

        store.DefineTable<Ficha>();

        //async initialization
        await MobileService.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());

        //Inicializate table
        tablaFicha = MobileService.GetSyncTable<Ficha>();

        isInitialized = true;
    }

    //Here get data 
    public async Task<IEnumerable<Ficha>> GetData() 
    {
        await Initialize();
        await SyncFicha();
        //Select data...
        return await tablaFicha.OrderBy(a => a.Id).ToEnumerableAsync();
    }   

    public async Task SyncFicha()
    {
        await tablaVehiculos.PullAsync("Ficha", tablaFicha.CreateQuery());
        await MobileService.SyncContext.PushAsync();
    }

“AzureDataService”类结束。现在是实现 AzureDataService 时的类。

public partial class ListaFichas : ContentPage 
{ 
    public static ObservableCollection ficha;

    public ListaFichas () 
    { 
        InitializeComponent ();  
        ficha = new ObservableCollection(); 
    }  

    protected async override void OnAppearing()
    {   
        base.OnAppearing();
        ficha.Clear();      

        //Next line get data from previous method of class "AzureDataService"
        var ligas = await App.AzureService.GetData();
        foreach(var item in ligas)
        {
            Ficha fi = item;
            ficha.Add(fi);
        }   
        //Here bind listview with data that previous get
        lsvFichas.ItemsSource = ficha;
    }

请帮助我。我想显示一个 Display 或 DisplayActionSheet 来通知用户......但绝不会意外关机。 谢谢!...

【问题讨论】:

  • UWP 社区工具包有一个名为NetworkHelper 的HelperClass,它有一个方法NetworkHelper.Instance.ConnectionInformation.IsInternetAvailable,如果yes 你有互联网连接。您可以使用它并根据特定要求进行处理。
  • 有一个James开发的跨平台插件Connectivity。此外,如果无法连接,您始终可以使用 try/catch 获取超时异常。无论如何,您都应该这样做,因为任何连接标志都可能是错误的。我经历了很多次在未连接时实现连接,反之亦然

标签: c# azure xamarin uwp xamarin.forms


【解决方案1】:

你必须检查互联网连接

以下链接对你有用

https://forums.xamarin.com/discussion/comment/276931#Comment_276931

【讨论】:

    【解决方案2】:

    AFAIK,如果您调用 PushAsyncPUSH 同步内容,那么针对您的脱机表的创建、更新和删除列表将一一发送到 Azure 应用服务。 PullAsyncPushAsync 操作都需要您的移动客户端在线。

    据我了解,您可以在致电SyncFicha 以同步您的数据之前检查互联网连接。此外,您可以使用try-catch 包装您的SyncFicha 方法,以便在推送离线数据时处理互联网连接和冲突。我建议您可以参考adrian hall 书中的以下教程:

    • Detecting Connection State

      使用Xam.Plugin.Connectivity检查连接状态如下:

      await Initialize();
      
      if (!(await CrossConnectivity.Current.IsRemoteReachable(Client.MobileAppUri.Host, 443)))
      {
          Debug.WriteLine($"Cannot connect to {Client.MobileAppUri} right now - offline");
          return;
      }
      
      await tablaVehiculos.PullAsync("Ficha", tablaFicha.CreateQuery());
      await MobileService.SyncContext.PushAsync();
      
    • Handling Conflict Resolution

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 2020-02-19
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多